• java集合类详解


    一、集合类与数组的区别

    1.集合的长度可变,数组的长度固定;

    2.集合用来存放对象引用,数组用来存放基本类型的数据;

    二、集合类的关系

    1.Collection接口

    存储一组不唯一、无序的对象。

    2.List接口

    存储一组不唯一、有序(插入顺序)的对象。

    2.1 实现类:ArrayList类、LinkedList类

    ArrayList类:实现长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率较高。

    ArrayList类常用方法

    add()  addAll()  clear()  size()  iterator()  get()  set()

    LinkedList类:采用链表存储方式,插入、删除元素时效率较高。

    add()  addAll()  addFirst()  addLast()  clear()  remove()  size()  iterator()  get()  set()

    3.Set接口

    存储一组唯一、无序的对象。

    唯一性:在添加对象时,会先采用对象的equals()方法与当前已有的对象的HashCode进行比较(重写了equals()方法的除外),如果没有相同的对象,则添加新的对象。

    无序性:没有get()方法,无法通过下标遍历Set集合。

    遍历set集合方法:

    3.1 通过迭代器Iterator

    public static void main(String[] args){
        Set<String> set = new HashSet<String>();
        set.add("c");
        set.add("a");
        set.add("c");
        set.add("b");
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            String str = (String) it.next();
            System.out.print(str + " ");
        }
    }

    输出结果:a b c

    3.2 增强型for循环

    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        set.add("c");
        set.add("a");
        set.add("c");
        set.add("b");
        for (Object obj : set) {
            String str = (String) obj;
            System.out.println(str);
        }
    }

    输出结果:a b c

    4.Map接口

    存储一组键值对象,提供key到value的映射。

    输出所有的key值:keySet()方法,返回键的Set视图;

    输出所有的values值:values()方法,返回值的Collection视图;

    获得所有的键值对:entrySet()方法,返回键值对的Set视图。

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("java", "课堂学习");
        map.put("Html", "视频学习");
    
        // 获得所有键值对的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 集合中对象的类型为Map.Entry
    // 方法一:通过增强型for循环
    for(Map.Entry<String, String> entry : entrySet) { String key = entry.getKey().toString(); String value = entry.getValue().toString(); System.out.println(key + "---" + value); }
    // 方法二:通过迭代器Iterator
    Iterator<Map.Entry<String,String>> it1;
    it1 = entrySet.iterator();

    while(it1.hasNext()){
    Map.Entry<String,String> me = it1.next();
    String key1 = me.getKey();
    String value1 = me.getValues();
    System.out.println(key1 + "---" + value1);
    }

    Iterator
    <String> it; System.out.println("key值:"); // 获得所有键的集合 Set<String> set = map.keySet(); // 集合中对象的类型为String it = set.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); } System.out.println(" values值:"); // 获得所有值的集合 Collection<String> coll = map.values(); // 集合中对象的类型为String it = coll.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); } }

     4.1 实现类

    HashMap、Hashtable、LinkedHashMap和TreeMap

    HashMap 

    HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的。

    Hashtable

    Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

    ConcurrentHashMap

    线程安全,并且锁分离。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTable,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可以并发进行。

    LinkedHashMap

    LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。

    TreeMap

    TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的。

  • 相关阅读:
    2013第49周四开发一定要细心
    2013第49周三IE9文档模式
    2013第49周二要转变
    2013第49周一jsp标签
    2013第48周11月工作小结
    2013第48周六记
    2013第48周五开发日记
    BZOJ 1269 文本编辑器 Splay
    审批流程设计方案-介绍(一)
    Web挖掘技术
  • 原文地址:https://www.cnblogs.com/YeHuan/p/10740990.html
Copyright © 2020-2023  润新知