集合的认识——List
List为接口,想要使用List,就要学会使用List的实现类。
List三种常见的实现类:LinkedList、ArrayList、Vector
添加元素:
list1.add('a'); 直接添加,可添加各种类型的元素,也可直接添加集合
list1.add(list0); 将集合0添加到集合1中,集合0作为集合1的一项存在
list1.add(2, "def"); 在指定位置添加元素
list1.addAll(list0); 将集合0添加到集合1中,集合0中的每一个元素作为集合1的一项而存在
list1.addAll(4,list0); 将集合0添加到指定位置
删除元素:
list1.remove(4); 删除指定角标的元素
list1.remove("ai"); 删除首次出现的指定元素
list1.removeAll(list0); 删除集合1中集合0的所有元素
list1.remove(list0); 删除集合1中集合0作为一项的所有元素
修改元素:
list1.set(2, "ai"); 修改指定角标的元素
查找元素:
list1.get(1); 获取指定角标的元素
其他方法:
subList(0, 1); 获取两个角标之间的子集和
indexOf(1); 获取该元素第一次出现的角标
lastIndexOf(1); 获取该元素最后一次出现的角标
toArray(a); 将集合转化为给定类型的数组
toArray(); 将集合转化为数组(无规定类型)
isEmpty(); 判断集合是否为空
注:
(1)add与addAll的区别:
add可添加任何类型的元素,包括集合。使用add添加的元素作为一项存在于集合中,如果添加的是一个集合,则这个集合整体作为原集合的一项。
addAll只能添加集合类型。addAll添加的集合每一项作为原集合的每一项而存在
如果使用add()添加集合,删除时只能使用remove()
如果使用addAll()添加集合,删除的时候只能使用removeAll()
例如:
List<Character> list0 = new ArrayList<Character>();
for (char i = 'a'; i < 'g'; i++) {
list0.add((char)i);
}
List<Object> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(list0);
打印结果为[1, 2, abc, a, [a, b, c, d, e, f]]
list1.addAll(list0);
打印结果为[1, 2, abc, a, a, b, c, d, e, f]
(2)remove与removeAll的区别:
remove可以删除集合中的每一项,既可以删除指定角标的元素,也可以删除指定元素。如果删除的元素有多个,之删除第一次出现的。
LinkedList特殊方法:
* 添加元素
addFirst() 将元素添加在链表的开端
addLast() 将元素添加在链表的末尾
addAll() 添加集合,将集合每个元素作为链表的每个元素
* 删除元素
removeFirst() 删除链表的第一个元素
removeLast() 删除链表的最后一个元素
* 修改元素
set(2, "123") 修改链表中指定角标对应的元素
* 查找元素
getFirst() 获取链表开始的元素
getLast() 获取链表末尾的元素
peek() 获取但不删除集合的第一个元素
peekFirst() 获取但不删除集合的第一个元素
peekLast() 获取但不删除集合的最后一个元素
poll() 获取并删除集合的第一个元素
pollFirst() 获取并删除集合的第一个元素
linklist.pollLast() 获取并删除集合的最后一个元素
使用效果:
集合的遍历:
迭代器
结果:
for循环
增强for循环
直接打印集合
三种List的实现类之间的区别:
LinkedList:
链表形式的集合,通过指针存取数据,不论在任何地方,只要插入数据,救火分配内存空间,所以插入删除速度快,不支持随机查找,只能顺序查找,因此速度慢。
ArrayList:
数组形式的集合,通过角标存取数据,每次在开始或中间插入删除数据,要移动该数据之后的所有元素,速度慢;而ArrayList支持随机查找,因此速度快。
Vector:
与ArrayList相似,但Vector是同步的,所以线程安全。在多线程的情况下最好使用Vector。
ArrayList每次扩充增加原来的50%,Vector每次扩充增加原来的一倍。
以上均为本人自己理解,若有错误,请指出,不胜感激!!!