集合框架复习总结(二)

上一次复习了Collection的内容:http://blog.csdn.net/m0_38012174/article/details/77488041


这次复习完了List的基础内容,现在就总结一下吧。

一、List集合的基本特有功能

 ① void add(int index,E element)
 ② E remove(int index)
 ③ E get(int index)
 ④ E set(int index,E element)

例子①:

@SuppressWarnings("all")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new ArrayList();
		list.add(11);
		list.add(12);
		list.add(13);
		System.out.println(list);
		list.add(1, 14);
		list.add(1, 15);
		System.out.println(list);
	}
 

所得到的结果为:

[11, 12, 13]
[11, 15, 14, 12, 13]


例子②:

继续使用上面的例子,list为[11, 15, 14, 12, 13]

Object obj = list.remove(1);
System.out.println(obj);
System.out.println(list);
list.removeAll(list);
System.out.println(list);



所得结果为:

15

[11, 14, 12, 13]
[]

用Object对象获取

即:remove是删除某个位置的对象。注意,使用该方法时,不要直接使用list里面的对象去调用,即不要list.remove(13),因为他会把13当做一个索引,不会自动装箱,会发生错误。

removeAll是删除整个List的内容


例子③:

同样道理,例子①中的list,list.get(2)就是得到14,第3个位置的的数据,因为list是由0开始算的,所以2就是第三个位置。


例子④:

System.out.println(list);
list.set(3, 16);
System.out.println(list);

得到的结果为:

[11, 15, 14, 12, 13]
[11, 15, 14, 16, 13]


结果是将第三个位置的数据覆盖了。


二、遍历数组

这个很简单,可以直接用for循环或者for—each循环直接遍历集合,集合长度为size(),利用get()方法进行遍历

得到一个list

for(int i=0;i<list.size();i++){
     System.out.println(list.get(i));
}

三、查找对象

假如有一个集合:

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("world");
list.add("d");
list.add("e");

那么可以使用迭代器Iterator获取每一个对象,再用equals()方法进行比较,得知在哪一个位置之后,再回到集合中增删查改。

注意,遍历的同时增加元素,会产生ConcurrentModificationException,避免这种情况就只能获取对象的索引位置,然后迭代完了再退回去集合中利用索引进行增删查改。


那么有没有简便一点的方法可以并发地修改集合list呢?

可以使用ListIterator

ListIterator lit = list.listIterator();				//获取迭代器(List集合特有的)
System.out.println(list);
while(lit.hasNext()) {
	String str = (String)lit.next();			//向下转型
	if("world".equals(str)) {
		//list.add("javaee");				//遍历的同时在增加元素,并发修改ConcurrentModificationException
		lit.add("javaee");
		lit.add("abc");
	}
}	
System.out.println(list);

得到的结果是:

[a, b, world, c, d, e]
[a, b, world, javaee, abc, c, d, e]


ListIterator特有的add方法,这个Iterator是没有的,这个方法可以迭代器修改元素

这里给个题外话

ListIterator的一些基本用法

 boolean hasNext()是否有下一个
 boolean hasPrevious()是否有前一个
 Object next()返回下一个元素
 Object previous();返回上一个元素


五、Vector类

Vector类概述
Vector类特有功能

三个基本方法:添加,查找位置,枚举
 public void addElement(E obj)
 public E elementAt(int index)
 public Enumeration elements()


六、LinkedList的总结

LinkedList的特有功能:

public void addFirst(E e)及addLast(E e)

public E getFirst()及getLast()

public E removeFirst()及public E removeLast()

public E get(int index);


LinkedList是链表实现了链表的集合

例子如下:

public static void main(String[] args) {
		LinkedList list = new LinkedList();
		list.addFirst("a");
		list.addFirst("b");
		list.addFirst("c");
		list.addFirst("d");
		list.addLast("e");
		
		System.out.println(list);
		
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
		System.out.println(list.removeFirst());
		System.out.println(list.removeLast());
		
		System.out.println(list.get(1));
		System.out.println(list);
	}

得到的结果是:

[d, c, b, a, e]
d
e
d
e
b
[c, b, a]


值得一提的是,Stack底层就是用LinkedList构建的。


七、asList()方法:

1.asList方法

public static void demo1() {
		String[] arr = {"a","b","c"};
		List<String> list = Arrays.asList(arr);			//将数组转换成集合
		//list.add("d");					//不能添加
		System.out.println(list);
	}

要注意的是,这里的数组一定要是引用数据类型,如能是基本数据类型

int[] arr = {11,22,33,44,55};			
List<int[]> list = Arrays.asList(arr);			//基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
System.out.println(list);
Integer[] arr1 = {11,22,33,44,55};					//将数组转换成集合,数组必须是引用数据类型
List<Integer> list1 = Arrays.asList(arr1);
System.out.println(list1);

得到的结果是:

[[I@544a5ab2]
[11, 22, 33, 44, 55]



八、List的子类总结

了解过List的基本用法后,可以去了解他的三个子类的特点了

ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。

LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。


他们之间存在的区别:

1.Vector相对ArrayList查询慢(线程安全的)
2.Vector相对LinkedList增删慢(数组结构)

3.Vector是线程安全的,效率低
   ArrayList是线程不安全的,效率高

4.ArrayList和LinkedList的区别。
(1)ArrayList底层是数组结果,查询和修改快
(2)LinkedList底层是链表结构的,增和删比较快,查询和修改比较慢
(3)共同点:都是线程不安全的

5.那么什么时候用哪一个?

查询多用ArrayList
增删多用LinkedList
如果都多ArrayList



那么List的内容就总结完了,接下来就开始复习Set和map的内容




猜你喜欢

转载自blog.csdn.net/m0_38012174/article/details/77712803