• 【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 + "	");
    			it.remove();
    		}
    		System.out.println("
    " + "现在为:空即为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("	");
                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("单词"+"	"+"个数");
            for (Map.Entry<String, Integer> entry : hashmap.entrySet()) {
                Object key = entry.getKey();
                Object val = entry.getValue();
                System.out.println(key.toString() + "	" + val.toString());
    } return hashmap; }

    输出结果:

  • 相关阅读:
    Warning: (1260, 'Row xxx was cut by GROUP_CONCAT()')
    MySQL之text字段
    将 Python 程序打包成 .exe 文件
    mysql json数据类型
    iOS边练边学--iOS中的json数据解析
    iOS边练边学--NSURLConnection发送HTTP请求以及NSString和NSData的相互转换
    iOS边练边学--Http网络再学习,简单介绍
    iOS边练边学--多线程练习的多图片下载 以及 使用第三方框架(SDWebImage)的多图片下载
    iOS边练边学--iOS中的(ARC下)单粒模式(GCD实现)
    iOS边练边学--cocoaPods管理第三方框架--命令行方式实现
  • 原文地址:https://www.cnblogs.com/carsonwuu/p/7528150.html
Copyright © 2020-2023  润新知