【Java】Collection,set,List,Map介绍(附实例)

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

Collection、List、Set、Map的关系图

 

一、对比数组和集合:

1.数组是存储同一种数据类型的集合容器。

数组的特点:

(1)只能存储同一种数据类型。

(2)初始化之后,长度固定。

(3)数组中的元素与元素之间的内存地址是连续的。

注意:Object类型的数组可以存储任意类型的数据。

 

2.集合是存储对象数据的集合容器。

集合的优势:

(1)集合可以存储任意类型的对象数据。

(2)集合的长度可以发生变化。

 

二、基本概念:

1.Collection 单例集合的根接口,List和Set是继承自Collection的子接口。
  1.1List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
    1.1.1ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
    1.1.2LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
    1.1.3Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

  1.2Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
    1.2.1HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
    1.2.2TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

三、常用方法

1.Collection接口

(1)遍历使用迭代子:

1 Collection collection=new ArrayList();
2 Iterator it = collection.iterator(); // 获得一个迭代子
3 while(it.hasNext()) {
4     Object obj = it.next(); // 得到下一个元素
5 }

Collection方法:

函数 返回值 作用
add(E o) boolean 确保此 collection 包含指定的元素(可选操作)。
addAll(Collection<? extends E> c) boolean 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
clear() void 移除此 collection 中的所有元素(可选操作)。
contains(Object o) boolean 如果此 collection 包含指定的元素,则返回 true。
containsAll(Collection<?> c) boolean 如果此 collection 包含指定 collection 中的所有元素,则返回true。
equals(Object o) boolean 比较此 collection 与指定对象是否相等。
hashCode() int 返回此 collection 的哈希码值。
isEmpty() boolean 如果此 collection 不包含元素,则返回 true。
iterator() Iterator<E> 返回在此 collection 的元素上进行迭代的迭代器。
remove(Object o) boolean 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
removeAll(Collection<?> c) boolean 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
retainAll(Collection<?> c) boolean 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
size() int 返回此 collection 中的元素数。
toArray() Object[] 返回包含此 collection 中所有元素的数组。
toArray(T[] a) <T> T[] 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

 

Iterator接口方法:

函数 返回值 作用
hasNext() boolean 如果仍有元素可以迭代,则返回 true。
next() E 返回迭代的下一个元素。
remove() void 从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。

2.Map 接口

2.1Map 接口不是 Collection 接口的继承。Collection是单列集合, Map 是双列集合。按定义,该接口描述了从不重复的键到值的映射。

  (1)Map存储的是键值对。

  (2)Map存储元素使用put方法,Collection使用add方法。

  (3)Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素。

  (4)Map集合中键要保证唯一性。

 

2.2Map常用方法:

函数 返回值 作用
clear() void 删除图中所有的条目
containsKey(key:Object) boolean 若图中包含指定键值对应的条目返回true
containsValue(value:Object) boolean 若图中一个或多个键值映射到特定值则返回true
entrySet() Set<Map.Entry<K,V>> 返回一个包含图中条目的规则集
get(key:Object) v 返回一个包含图中条目的规则集
isEmpty() boolean 若图中不包含任何条目则为true  
keySet() Set<K> 返回包含图中键值的一个规则集
put(key:K,vale:V) V 将一个映射放入图中
putAll(m:Map<,>) void 将所有来自m的条目添加到图中
remove(key:Object) V 删除指定键值对应的条目
size() int   返回图中的条目个数
values() Collection<v> 返回包含图中值的集合

四、实例

(1)ArrayList的增加与删除遍历;HashMap的增加删除与遍历。

import java.util.*;
public class CollectionAndMap {
	public static void add() {
		// ArrayList增加删除
		Collection collection = new ArrayList(Arrays.asList("red", "blue", 2, 5.2));// 初始化
		collection.add("green");// 添加
		Object[] string = collection.toArray(); // 转换为Object[]
		for (Object str : string)
			System.out.println(str.toString());
		Iterator it = collection.iterator();// 迭代子访问
		while (it.hasNext()) {
			Object temp = it.next();
			System.out.print(temp + "\t");
			it.remove();
		}
		System.out.println("\n" + "现在为:空即为true:" + collection.isEmpty());

		// 使用HashMap存储访问<String,Integer>;
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("red", 2);
		map.put("red", 3);// 前一个会被覆盖
		map.put("blue", 5);
		Set<Map.Entry<String, Integer>> set = map.entrySet();
		Iterator<Map.Entry<String, Integer>> itSet = set.iterator();// 迭代子访问
		int tag=1;
		while (itSet.hasNext()) {
			Map.Entry<String, Integer> temp = itSet.next();
			String str = temp.getKey();
			Integer integer = temp.getValue();
			if(tag==1){
				itSet.remove();//删除第一项
				tag--;
			}
			System.out.println(str + ":" + integer.intValue());
		}
		System.out.println(map.size());

	}
	public static void main(String[] args){
		add();
	}
}

(2)HashMap<String,Integer>统计String的个数(从文件中读取数据):形如(第三个参数不使用):

1 red    2    one
2 green    5    two
3 black    7    three
4 red    10    forth

实现代码:

public static HashMap<String, Integer> MapRead(File filea) throws FileNotFoundException {
        HashMap<String, Integer> hashmap = new HashMap<String, Integer>();
        BufferedReader bra = new BufferedReader(new FileReader(filea));
        Scanner sa = new Scanner(bra);
        while (sa.hasNextLine()) {
            String line = sa.nextLine();
            String[] lines = line.split("\t");
            String name = lines[0];
            String num = lines[1];
            /* 统计第一个String 个数 */
            if (hashmap.containsKey(name))
                hashmap.put(name, hashmap.get(name) + 1);
            else
                hashmap.put(name, 1);
        }
     System.out.println("单词"+"\t"+"个数");
        for (Map.Entry<String, Integer> entry : hashmap.entrySet()) {
            Object key = entry.getKey();
            Object val = entry.getValue();
            System.out.println(key.toString() + "\t" + val.toString());
} return hashmap; }

输出结果:

 

posted @ 2017-09-15 19:45  carsonwuu  阅读(344)  评论(0编辑  收藏  举报