Set 、ArrayList 、 LinkedList 、Vector、Map

集合类Collection
[color=red]List[/color]表示有先后顺序的集合,父类为Collection,有add()、get()等方法
[color=cyan]Collection有List、Set子类,注意:Map不是Collection的子类[/color]
[color=blue]*********************************************************************[/color]
[color=red]ArrayList[/color]
ArrayList是用数组的方式存储的,其存储空间要大于实际存储的元素数,便于增加和插入元素,也能够直接按序号索引元素,但是插入元素时涉及到数组元素移动量大的问题,——索引数据块块而插入慢。
[color=blue]*********************************************************************[/color]
[color=red]Vector[/color]
Vector是用数组的方式存储的,使用了synchronized方法(线程安全),其他ArrayList一样。
[color=blue]*********************************************************************[/color]
[color=red]ArrayList、Vector和Set的比较[/color]:
都实现了List接口(List接口是继承Collection接口的),都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于动态的数组,以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是和HashSet之类的最大的不同点,HashSet不可以按索引号去检索其中的元素的,也不允许元素的重复。
[color=blue]*********************************************************************[/color]
[color=red]Map[/color]:存放一键值对
[color=red]HashMap[/color]:新的类,异步处理,非线程安全,允许有null
[color=red]Hashtable[/color]:旧的类,同步处理,线程安全,不允许有null
[color=red]TreeMap[/color]:有序排列,按key排序
[color=blue]*********************************************************************[/color]
[color=red]Iterator[/color]:
迭代输出,依靠Collection接口中的iterator方法输出,是新的输出标准
[color=red]Enumeration[/color]:旧的输出标准
[color=blue]*********************************************************************[/color]
[color=red]LinkedList[/color]
LinkedList是用双向链表的方式存储的,按序号索引数据需要进行向前或者向后遍历,但是插入数据时只需记录本项的前后项即可,所以插入块。

[color=blue]*********************************************************************[/color]
[color=red]Set[/color]
TreeSet的底层实现是采用红-黑树的数据结构,采用这种结构可以从Set中获取有序的序列,但是前提条件是:元素必须实现Comparable接口,该接口中只用一个方法,就是compareTo()方法。当往Set中插入一个新的元素的时候,首先会遍历Set中已经存在的元素(当然不是采用顺序遍历,具体采用什么方法,建议自己去看看源码),并调用compareTo()方法,根据返回的结果,决定插入位置。进而也就保证了元素的顺序。
[color=cyan]Set类拥有add()方法,此方法的返回值有{true &false}[/color]
[color=red]HashSet与TreeSet区别[/color]:
1、TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束
3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例
[color=blue]*********************************************************************[/color]
帮助类Collections
[color=red]Collections类的静态方法:[/color]
Collections.sort(); ————————————————> 完成集合的排序工作
实验来验证如下:
Vector vect = new Vector(); //定义vect
for(int i=100;i>0;i--){
vect.add(i); //往里面添加元素
}
Vector vect2 = new Vector();
for(int j=0;j<vect.size();j++){ //得到大小size()
Object obj = vect.get(j); //得到具体元素
if(!vect2.contains(obj)){ //检验是否包含obj元素
vect2.add(obj);
}
} //到此为止vect2中的元素100 99 98 ~~~顺序
Collections.sort(vect2); //[color=red]排序[/color]!!!!此时vect2中的元素顺序为1 2 3 4~~~
for(int h=0;h<vect2.size();h++){
System.out.println(vect2.get(h));
}
[color=blue]*********************************************************************[/color]
另:
[color=red]Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? [/color]
应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值