容器( Collection)

程序中所谓的容器就是收纳、管理数据。数组也不失为一种容器。但是数组创建后长度固定不变,没有容器好用。以下为常见的容器分类
在这里插入图片描述

Collection接口

方法

返回值类型方法
booleanadd(E e)
booleancontains(Object o)
booleanequals(Object o)
booleanisEmpty()
Iteratoriterator()
intsize()
Object[]toArray()

实例

public class CollectionDemo02 {
	public static void main(String[] args) {
		Collection col=new ArrayList();
		col.add(1);
		System.out.println(col);
		//泛型 提高可读性,规范数据的类型
		Collection<String> col2=new ArrayList();
		col2.add("hehe");
		System.out.println(col2);
		Collection<Integer> col3=new ArrayList();
		col3.add(1);
		System.out.println(col3);
		//删除 remove()
		col2.remove("haha");
		System.out.println(col2);
		System.out.println(col.contains("哈哈")); 
		//不能直接把Object[]数组转为其他类型的数组,可以取其中数据
		Object[] arr=col2.toArray();
		System.out.println(Arrays.toString(arr));
	
	}
}

遍历容器

		//遍历:
		//for..each
		for(String o:col2){
			System.out.println(o);
		}
		//迭代器
		//1.获取迭代器对象
		Iterator it=col2.iterator();
		//2.判断是否有下一个元素
		while(it.hasNext()){
			//3.获取下一个元素
			System.out.println(it.next());
		}

一、List接口

List与 Set 不同是List接口列表通常允许重复的元素。List接口继承Collection接口,没有新的方法
List接口的实现类:ArrayList、LinkedList

1、ArrayList

ArrayList实现类实现List接口,通过可变数组实现的,没有自定义新的方法,使用copyOf方法进行动态扩容,为原容量的1.5倍

2、LinkedList

Linked实现类实现List接口,底层通过 双向链表实现,新增了一些操作与链表头尾的方法
方法

返回值类型方法
voidaddFirst(E e)
voidaddLast(E e)
EgetFirst()
EgetLast()

实例

	public static void main(String[] args) {
		LinkedList<String> ll = new LinkedList();
		ll.add("你好");
		ll.add("我好");
		ll.add("好");
		ll.addFirst("我是头");
		ll.addLast("我是尾");
		System.out.println(ll.element());
		System.out.println(ll.get(1));
		System.out.println(ll.indexOf("你好"));
		System.out.println(ll.toString());
	}

二、Set接口

Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。Set中的元素没有索引,我们只能遍历查找。添加的数据不可重复。

1、HashSet

HashSet是Set接口的实现类是通过HashMap实现,底层又数组链表或者红黑树构成。
存放基本数据类型和String类会实现自动去重。
例子

public class SetDemo02 {
	public static void main(String[] args) {
		HashSet<String> hash=new HashSet();
		hash.add("哈哈");
		hash.add("哈哈");
		hash.add("哈哈");
		hash.add("哈哈");
		hash.add("哈哈");
		System.out.println(hash);
	}
}
结果为[哈哈]

引用数据类型存入时,需要重写重写hashcode和equals方法才能实现去重。

2、TreeSet

HashSet是Set接口的实现类是通过红黑树构成,存放基本数据类型和String类会实现自动去重。如果存放引用数据类型的话,可以定义比较规则,排序规则,并且可以使用去重原则。
比如TreeSet存放Person类
此方法是内部比较器也称自然排序: 实现Comparable接口,重写comparaTo方法,在方法中定义比较规则.,默认的比较规则。如果.o.age-this.age>0传入的参数放右边,<0放左边。==0去重不存入。

package com.shsxt.set01;
public class Person implements Comparable<Person> {  //泛型T - 可以与此对象进行比较的那些对象的类型
//public class Person {  
	private String name;
	private int age;
	//根据年龄进行比较,年龄相同就是一个对象
	@Override
	public int compareTo(Person o) {
		return o.age-this.age;
	}	
}

下一篇讲解Map接口及实现Map接口的类。欢迎继续追更。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值