Java中的集合
集合的定义
集合的容量是可以自动扩展的,在编程时更具灵活性;
数组中既可以存放基本数据类型,也可以存放引用数据类型;
而集合类中只能存放引用数据类型;
集合的分类
1、Collection 接口 - 线性集合;每一个元素只有一个前驱,同时也只有一个后继;
a)List 接口 - 可以存放有序有重复的元素,List集合是有下标的,可以用下标访问元素;
1、ArrayList - 内部是用数组来存放元素的,初始化的时候定义了10个元素的Object数组,当元素超过最大限度时,会生成一个新的数组,长度是原有数组的1.5倍,用新数组去替换旧数组;
特点: 查询速度快,而插入删除速度慢;元素在逻辑结构和物理结构上都是连续的;
2、LinkedList - 内部使用链表实现的,提供了一些特殊的方法可以将集合当作栈或者队列来使用;
特点:查询速度慢,而插入删除速度快;逻辑连续,物理不连续;
b)Set 接口 - 可以存放无序无重复的元素,Set集合没有下标,元素不能用下标来访问;
1、HashSet - 元素存入到集合中的位置是由元素的哈希码所决定的;hashcode();内部也是数组实现的;
2、TreeSet - 元素是排序的,放入到TreeSet集合中的元素必须是可被排序的;
迭代器 - Iterator 接口 .iterator();方法生成迭代器对象;
有序/无序 - 有序指的是元素存入到集合中的顺序和元素在集合中存放的顺序一致;
- 无序指的是元素存入到集合中的顺序和元素在集合中存放的顺序不一致;
重复 - 如果 A 和 B 两个元素,如果满足 A.equals(B) == true ,则认为 A 和 B 是重复的;例如,“hello”与new String(“hello”)是重复的。
2、Map 接口 - 非线性集合;元素是以 Key-Value(键值对)的形式存放的;
1、HashMap - 元素在集合当中存放的位置是和键的哈希码有关;hashcode();
2、TreeMap - 元素以键的顺序进行排序;
泛型
泛型 - 类型的参数化 Point<T>
基本数据类型不能作为泛型的实参;必须都是引用数据类型;
总结
ps:以下内容转自网络
集set:
HashSet:
使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的.
TreeSet:
在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap.
列表list:
Vector:
实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类??当两个或多个线程同时访问时也是性能良好的。
Stsck: 这个类从Vector派生而来,并且增加了方法实现栈??一种后进先出的存储结构。
LinkedList: 实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。
ArrayList: 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。
映射map:
HashTable:
实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。
HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。
WeakHashMap:
实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。
TreeMap: 实现这样一个映象,对象是按键升序排列的。
Set和List都是由公共接口Collection扩展而来,所以它们都可以使用一个类型为Collection的变量来引用。这就意味着任何列表或集
构成的集合都可以用这种方式引用,只有映射类除外(但也不是完全排除在外,因为可以从映射获得一个列表。)所以说,把一个列表或集传递给方法的标准途径是
使用Collection类型的参数。