Java集合
根据所存储元素的类型不同分为两种,一种是存储value类型的Collection一种是按 key-value形式存储的Map类型
Collection
collection现在常用的分为List(有序可重复)、Vector和Set(无序不重复)集合,其中List又可以划分为ArrayList和LinkedList,Set可以划分为HashSet和TreeSet。
一、List常用的方法
- size() 返回集合列表中的元素个数
- isEmpty() 判断有没有元素 无:返回true, 有:返回false
- a.contains(b) 判断列表a中是否包含b 是:true 否:false
- iterator() 迭代器 遍历数据时可以使用
List list = new ArrayList();
for (int i=0;i<5;i++){
list.add(i);
}
Iterator l = list.iterator();
while(l.hasNext()){
System.out.println(l.next());
}
- toArray() 可以将list集合转换为数组
- add(E e) 向集合添加指定元素
- retainAll() 两个集合取交集
- remove(Object o) 删除指定元素
- remove(int index) 删除并返回指定位置的元素
- sort() 对集合进行排序排序
List list = new ArrayList();
list.add(2);
list.add(3);
list.add(7);
list.add(9);
list.add(1);
list.add(11);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
- get() 获取指定位置的元素
- set(int index,E element) 用指定的元素代替指定位置的元素
- indexOf(object o) 查找元素在列表中第一次出现的索引位置 不包含该元素则返回-1
- lastIndexOf(object o) 查找元素在列表中最后一次出现的索引位置 不包含该元素则返回-1
- subList(int fromIndex,int toIndex) 返回List中一部分视图,以fromIndex开始(包含),以toIndex结束(不包含)的部分
String[] str1 = {1,2,3,4,5,6};
String[] str2 = str1.subList(1,3);
打印出来str2 的结果:2;3;记住数组下标0开始!!!
15.clear() 释放list集合中的所有对象,使集合为空。 list.clear()和list=null是有区别的
ArrayList list1 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
System.out.println(list1);
list1.clear();
System.out.println(list1);
list1.add(1);
list1.add(2);
list1.add(3);
System.out.println(list1);
list1=null;
System.out.println(list1);
当使用list=null之后 则list不能在被使用
二、ArrayList:
一:特点
- 有序
- 可重复
- 任意类型任意个数
- 线程不安全
- 内部基于数组有索引(查找比较快)
三、LinkedLis
特点:
- 有序
- 可重复
- 任意类型任意个数
- 线程不安全
- 内部基于链表(添加删除比较快)
四、Vector
特点:
- 线程安全
- 内部基于数组
- 适合查询
五、ArrayList和Vector、LinkedList的区别总结
ArrayList在内存不够时默认扩张50%+1个,Vector是默认扩张1倍
Vector提供index(obj,start)接口,ArrayList没有
Vector属于线程安全级别的,但是大多数情况下不适用,因为线程安全需要更大的系统开销
所以一般能用ArrayList的情况下,就不用Vector
六、Set集合
set集合不包含重复的元素。
特点:
无序、唯一
-
HashSet
底层数据结构是哈希表(无序唯一)
通过依赖两个方法:hashCode()和equals()来保证元素的唯一性Hashset是set接口的实现类,也就是我们最常用的set集合,由于是无序的所以每组数据都没有索引,很多list可用的方法他都没有,凡是需要索引来进行操作的方法都没有。所以也不能使用普通for循环来进行遍历,只有加强型for和迭代器两种遍历方法。
- 例:get(i)、set(int index,Object o)、remove(int index)等需要索引来进行操作的方法都没有。
//增强型for
for(News n : set){
System.out.println(n.getID()+"\t"+n.getLitter()+"\t"+n.getAuthor());
}
System.out.println("*****************************************");
//迭代器
Iterator<News> it = set.iterator();
while (it.hasNext()) {
News n = it.next();
System.out.println(n.getID()+"\t"+n.getLitter()+"\t"+n.getAuthor());
}
- LinkedHashSet
底层数据结构是链表和哈希表(FIFO插入有序,唯一)
由链表保证有序 由哈希表保证元素唯一 - TreeSet
底层数据结构是红黑树(唯一、无序)
通过自然排序、比较器排序来保证元素排序
通过比较的返回值是否为0来判断元素唯一性