对象的容器,定义了对多个对象进行 *** 作的常用方法,可实现数组功能。
(2)和数组的区别- 数组长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型。
- Collection:该体系接口的根接口,代表一组对象,称为集合。
- List:有序,有下标,元素可重复。
- Set :无序,无下标,元素不可重复。
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():将集合转换成数组。
有序的集合。可以对列表中每个元素的插入位置进行精确地控制。可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素,且列表中的元素可重复。
(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):移除集合中第一次出现的指定元素(如果存在)。
特点:数据结构实现,查询快,增删慢,运行效率快,线程不安全。
源码分析:
- 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
特点:数据结构实现,查询快,增删慢,运行效率慢,线程安全。
使用迭代器遍历集合。
//使用枚举器遍历 Enumeration3.linkedList
特点:链表结构实现,查询慢,增删快。
与ArrayList区别:
无需的集合,无下标,元素不可重复。
(2)常用方法方法全部继承自Collection中的方法。
(3)Set实现类 1.HashSet- 基于HashCode计算元素存放位置。
- 当存入元素的哈希码相同时,会调用equals方法进行确认,若结果为true,则拒绝后者存入,
- 基于排列顺序实现元素不重复。
- 实现了SortedSet接口,对集合元素自动排序。
- 元素对象的类型必须实现Comparable接口,并指定排序规则。
- 通过CompareTo方法确定是否为重复元素。
- Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。
- 常见形式有泛型类、泛型接口、泛型方法。
- 语法:
T称为占位符,表示一种引用类型。 - 优点:(1)提高代码的重用性。
(2)防止类型转换异常,提高代码的安全性。
- 概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致。
- 特点:(1)编译时即可检查,而非运行时抛出异常。
(2)访问时,不必进行类型转换(拆箱)。
(3)不同泛型之间引用不能相互赋值,泛型不存在多态。
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集合。
- 存储结构:哈希表(数组+链表+红黑树)
- 无参构造构造一个具有默认初始容量 (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(5)Hashtable[] table; //HashMap存储的数组 transient int size; //HashMap存储的元素个数
- JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value。
- 初始容量11,加载因子0.75。
- 这个集合在开发过程中已经不用了,稍微了解即可。
- Hashtable的子类,要求key和value都是String。通常用于配置文件的读取。
- 它继承了Hashtable的方法,与流关系密切,此处不详解。
集合工具类,定义了除了存取以外的集合常用方法。
(2)方法- public static void reverse(List> list)//反转集合中元素的顺序
- public static void shuffle(List> list)//随机重置集合元素的顺序
- public static void sort(List list)//升序排序(元素类型必须实现Comparable接口)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)