集合

来源:互联网 发布:山芋发芽还能吃吗 知乎 编辑:程序博客网 时间:2024/06/10 15:25

集合

这里写图片描述

LIST

List 有序,可重复

  • ArrayList 数组结构,访问效率高,操作效率低
    • 以数组实现,但数组有容量限制。超出限制时会增加50%的容量,用System.arraycopy()复制到新数组。默认第一次插入元素时创建大小为10的数组
    • 按数组下标访问元素,性能很高,这是数组的基本优势。按下标插入删除,则要用System.arraycopy()来复制移动部分受影响的元素,性能就变差了,越是靠前,修改时要移动的元素越多。直接在末尾添加或删除则无影响
  • LinkedList 链表结构,访问效率低,操作效率高
    • 以双向链表实现,链表无容量限制,但双向链表本身使用了很多空间,每插入一个元素都要构造一个额外的Node对象,也需要额外的链表指针操作
    • 按数组下标访问元素,要部分遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。插入删除时,修改前后节点的指针即可,不需要复制移动,但还是要部分遍历链表的指针才能移动到下标所指的位置。只有在链表两头的操作,能省掉指针的移动

ArrayList常用方法

toArray() 返回一个包含集合所有元素的Object数组

add(E e) 增加元素

addAll(Collection c) 将集合里的所有元素追加到后面

size() 集合大小

isEmpty() 集合不包含元素,返回true

contains(Object o) 包含元素返回true

set(int index,E element) 将元素替换到指定位置

get(int index) 返回集合指定的元素

indexOf(Object o) 返回此列表中指定元素的第一个出现的索引,如果此列表不包含元素返回-1

lastIndexOf(Object o) 返回此列表中指定元素的最后一个出现的索引,如果此列表不包含元素返回-1

remove() 移除元素

removeAll(Collection c) 移除集合中的所有元素

clear() 移除所有元素

isEmpty 与 null

isEmpty()和size()==0是等价的,都是判断元素是否为空

直接看代码

        ArrayList al1 = new ArrayList();        ArrayList al2 = null;        System.out.println(al1==null);        System.out.println(al1.isEmpty());        System.out.println(al2==null);//      System.out.println(al2.isEmpty());  -->NullPointerException运行结果为:falsetruetrue
  • isEmpty()对象在内存中有被分配空间,只是对象的内部没有内容而已。isEmpty()等价于size()==0
  • null表示对象在内存中没有被分配空间,在通过 . 调用属性或方法时会出现NullPointerException

SET

Set 无序,不重复

  • HashSet 允许null
  • TreeSet 不允许null 只当需要产生一个经过排序的序列时,才有TreeSet

Set的三种遍历方式

  1. Iterator it = hashSet.iterator();
  2. for each
  3. Object[] array = hashSet.toArray();
        Iterator it = hs.iterator();        while(it.hasNext()){            System.out.println(it.next());        }        System.out.println("-------");//---2-------------------------------------------------------           for (Object obj : hs) {            System.out.println(obj);        }        System.out.println("-------");//---3-------------------------------------------------------               Object[] array = hs.toArray();        for (int i = 0; i < array.length; i++) {            System.out.println(array[i]);        }

MAP

Map 映射 键值对

  • HashMap 允许存在null 不安全 重新计算hash值,用于代替求模 hash数组默认大小16,2的指数 基于 AbstractMap类

  • HashTable 都不允许有null 安全 直接使用对象的hashCode hash数组默认大小11,old*2+1 基于Dictionary类

  • TreeMap 键不允许有null

put(K key , V value) 添加键值对

get(Object key) 返回指定键的值

contains(Object key) 否存有这个键,有true, 无false

contains(Object value) 否存有这个值

Set keySet() 返回键的一个Set集合

Collection values() 返回一个值的Collection

Set entrySet() 返回一个以键值对形式的Set集合 以 key=value 的形式返回

原创粉丝点击