JAVA集合

JAVA集合,第1张

JAVA集合 一、集合 (1)概念

  对象的容器,定义了对多个对象进行 *** 作的常用方法,可实现数组功能。

(2)和数组的区别
  • 数组长度固定,集合长度不固定
  • 数组可以存储基本类型和引用类型,集合只能存储引用类型。
(3)集合体系结构

  • Collection:该体系接口的根接口,代表一组对象,称为集合。
  • List:有序,有下标,元素可重复。
  • Set :无序,无下标,元素不可重复。
二、Collection父接口 (1)特点

  Collection层次结构中的根接口,Collection表示一组对象。一些 collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。JDK不提供此接口的任何直接实现:它提供更具体的子接口(如Set和List)实现。

(2)常用方法
  • boolean add(Object obj):添加一个对象。
  • boolean addAll(Collection c):将指定集合中的所有元素都添加到此 集合中。
  • void clear():移除此集合中的所有元素。
  • boolean contains(Object o):检查此集合是否包含指定对象o。
  • boolean containsAll(Collection c):检查此集合是否包含指定集合中的所有元素。
  • boolean equals(Object o):比较此集合与指定对象是否相等。
  • boolean isEmpty():判断集合是否为空。
  • boolean remove(Object o):从此集合中移除对象o。
  • int size():返回此集合中的元素个数。
  • Object[] toArray():将集合转换成数组。
三、List子接口 (1)特点

  有序的集合。可以对列表中每个元素的插入位置进行精确地控制。可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素,且列表中的元素可重复。

(2)常用方法
  • void add(int index, Object o):在列表的指定位置插入指定对象。
  • boolean addAll(int index, Collection c):将指定集合中的所有元素添加到此集合的指定位置。
  • Object get(int index):返回集合中指定位置的对象元素。
  • List subList(int fromIndex, int toIndex):返回fromIndex(包括 )到 toIndex(不包括)之间的集合元素 。
  • Object remove(int index):移除集合中指定位置的元素。
  • boolean remove(Object o):移除集合中第一次出现的指定元素(如果存在)。
(3)List实现类 1.ArrayList

特点:数据结构实现,查询快,增删慢,运行效率快,线程不安全。
源码分析:

  • DEFAULT_CAPACITY=10;默认容量为10,如果没有添加任何元素时,容量为0,添加任意一个元素,容量变为10。
  • elementData:存放元素的数组。
  • size:实际元素个数。
  • add();添加元素
    public boolean add(E e) {
        modCount++;
        add(e, elementData, size);
        return true;
    }
    
    private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length) //如果实际元素个数等于数组的长度
            elementData = grow(); //数组扩容
        elementData[s] = e; //
        size = s + 1;
    }
2.Vector

特点:数据结构实现,查询快,增删慢,运行效率慢,线程安全。
使用迭代器遍历集合。

//使用枚举器遍历
Enumeration enumeration = vector.elements();
while (enumeration.hasMoreElements()){
	String o =(String) enumeration.nextElement();
    System.out.println(o);
}
 
3.linkedList 

特点:链表结构实现,查询慢,增删快。
与ArrayList区别:

四、Set子接口 (1)特点

  无需的集合,无下标,元素不可重复。

(2)常用方法

  方法全部继承自Collection中的方法。

(3)Set实现类 1.HashSet
  • 基于HashCode计算元素存放位置。
  • 当存入元素的哈希码相同时,会调用equals方法进行确认,若结果为true,则拒绝后者存入,
2.TreeSet
  • 基于排列顺序实现元素不重复。
  • 实现了SortedSet接口,对集合元素自动排序。
  • 元素对象的类型必须实现Comparable接口,并指定排序规则。
  • 通过CompareTo方法确定是否为重复元素。
五、泛型 (1)泛型概述
  • Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。
  • 常见形式有泛型类、泛型接口、泛型方法。
  • 语法: T称为占位符,表示一种引用类型。
  • 优点:(1)提高代码的重用性。
       (2)防止类型转换异常,提高代码的安全性。
(2)泛型集合
  • 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致。
  • 特点:(1)编译时即可检查,而非运行时抛出异常。
       (2)访问时,不必进行类型转换(拆箱)。
       (3)不同泛型之间引用不能相互赋值,泛型不存在多态。
六、Map集合 (1)概念

Map是一种依照键(key)存储元素的容器,键很像下标,在List中下标是整数。在Map中键可以是任意类型的对象。Map中不能有重复的键,每个键都有一个对应的值。

(2)特点

存储一对数据(Key-Value),无序,无下标,键不可重复,值可以重复。

(3)方法
  • V put(K key, V value):将对象存入到集合中,关联键值。key重复则覆盖原值。
  • V get(Object key):返回指定键所映射的值。
  • Set:返回所有的key。
  • Collection values():返回此映射中包含的值的Collection集合。
  • Set> entrySet():返回此映射中包含的映射关系的Set集合。
(4)HashMap
  • 存储结构:哈希表(数组+链表+红黑树)
  • 无参构造构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空HashMap。
  • HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16。
  • 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍,目的是减少元素调整个数。
  • 当每个链表长度大于8,数组元素个数大于64时,会调整 为红黑树,提高执行效率。
  • 当链表长度小于6时,调整成链表。
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认初始化容量16
static final int MAXIMUM_CAPACITY = 1 << 30; //数组最大容量
static final float DEFAULT_LOAD_FACTOR = 0.75f; //默认加载因子
static final int TREEIFY_THRESHOLD = 8; //链表调整为红黑树的链表长度阈值(JDK1.8)
static final int UNTREEIFY_THRESHOLD = 6; //红黑树调整为链表的链表长度阈值(JDK1.8)
static final int MIN_TREEIFY_CAPACITY = 64; //链表调整为红黑树的数组最小阈值(JDK1.8)
transient Node[] table; //HashMap存储的数组
transient int size; //HashMap存储的元素个数
(5)Hashtable
  • JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value。
  • 初始容量11,加载因子0.75。
  • 这个集合在开发过程中已经不用了,稍微了解即可。
(6)Properties
  • Hashtable的子类,要求key和value都是String。通常用于配置文件的读取。
  • 它继承了Hashtable的方法,与流关系密切,此处不详解。
七、Collections工具类 (1)概念

集合工具类,定义了除了存取以外的集合常用方法。

(2)方法
  • public static void reverse(List list)//反转集合中元素的顺序
  • public static void shuffle(List list)//随机重置集合元素的顺序
  • public static void sort(List list)//升序排序(元素类型必须实现Comparable接口)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4692407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)