【Java】Collection与Map接口总结

Collection
    -----List
               -----LinkedList    非同步
                ----ArrayList      非同步,实现了可变大小的元素数组
                ----Vector          同步 线程安全
                          ------Stack
    -----Set   不允许有相同的元素
Map
    -----Hashtable        同步,实现一个key--value映射的哈希表
    -----HashMap          非同步,
    -----WeakHashMap   改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收

子接口  

Set,List  

集合中只能放置对象的引用,不能放置原生数据类型,  

我们需要使用原生数据类型的封装类才能加入到集合中

List常用方法:

package com.itlwc;

import java.util.ArrayList;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		List list = new ArrayList();
		// 向列表的尾部追加指定的元素
		list.add("lwc");
		// 在列表的指定位置插入指定元素
		list.add(1, "nxj");
		// 追加指定 collection 中的所有元素到此列表的结尾
		list.addAll(new ArrayList());
		// 从列表中移除所有元素
		list.clear();
		// 如果列表包含指定的元素,则返回true
		list.contains("nxj");
		// 如果列表包含指定 collection 的所有元素,则返回 true
		list.containsAll(new ArrayList());
		// 比较指定的对象与列表是否相等
		list.equals(new ArrayList());
		// 返回列表中指定位置的元素
		list.get(0);
		// 返回列表的哈希码值
		list.hashCode();
		// 返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回 -1
		list.indexOf("lwc");
		// 返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回 -1
		list.lastIndexOf("lwc");
		// 如果列表不包含元素,则返回 true
		list.isEmpty();
		// 移除列表中指定位置的元素
		list.remove(0);
		// 移除列表中出现的首个指定元素
		list.remove("lwc");
		// 从列表中移除指定 collection 中包含的所有元素
		list.removeAll(new ArrayList());
		// 用指定元素替换列表中指定位置的元素
		list.set(0, "lp");
		// 返回列表中的元素数
		list.size();
		// 返回列表中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图
		list.subList(1, 2);
		// 返回以正确顺序包含列表中的所有元素的数组
		list.toArray();
		// 返回以正确顺序包含列表中所有元素的数组
		list.toArray(new String[] { "a", "b" });
	}
}

 

ArrayList

构造方法
public ArrayList()
public ArrayList(int initialCapacity)
public ArrayList(Collection c)
ArrayList依赖于数组实现的,初始长度为10的Object[],并且可随需要而增加的动态数组
当元素超过10,那么ArrayList底层会新生成一个数组,长度为原来的1.5倍+1,
然后将原数组内容复制到新数组中,并且后续增加的内容会放到新数组中,
当新数组无法容纳增加的元素,重复该过程
ArrayList对随机访问性能很好,但进行大量插入,删除操作,性能很差,
因为操作之后后续元素需要移动

遍历ArrayList

package com.itlwc;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("lwc");
		list.add("nxj");
		// 方法一
		Iterator<String> ite1 = list.iterator();
		while (ite1.hasNext()) {
			String str = ite1.next();
			System.out.println(str);
		}
		System.out.println("---------------------");
		// 方法二(方法一的变形)
		for (Iterator<String> ite2 = list.iterator(); ite2.hasNext();) {
			String str = ite2.next();
			System.out.println(str);
		}
		System.out.println("---------------------");
		// 方法三
		for(String s : list){
			System.out.println(s);
		}
	}
}
/*
打印结果:
	lwc
	nxj
	---------------------
	lwc
	nxj
	---------------------
	lwc
	nxj
*/

  

遍历LinkedList

package com.itlwc;

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class Test {
	public static void main(String[] args) {
		List link = new LinkedList();
		link.add(123);
		link.add("lwc");
		link.add(8.8);
		link.add("nxj");
		link.add(520);
		printList(link);
		printReversedList(link);
	}

	private static void printList(List link) {
		System.out.println("正序链表中的元素");
		// 的到链表的迭代器,位置指向链头
		ListIterator li = link.listIterator();
		// 判断迭代器中是否有下一个元素
		while (li.hasNext()) {
			// 返回下个元素
			System.out.print(li.next() + " ");
		}
		System.out.println();
	}

	private static void printReversedList(List link) {
		System.out.println("逆向链表中的元素");
		// 的到链表的迭代器,位置指向link.size()结尾
		ListIterator li = link.listIterator(link.size());
		// 判断迭代器中是否有前一个元素
		while (li.hasPrevious()) {
			// 返回前一个元素
			System.out.print(li.previous() + " ");
		}
		System.out.println();
	}
}
/*
打印结果:
	正序链表中的元素
	123 lwc 8.8 nxj 520 
	逆向链表中的元素
	520 nxj 8.8 lwc 123 
*/

  

posted @ 2017-03-10 14:45  陈泽泽  阅读(220)  评论(0编辑  收藏  举报