网上搜索了Java集合类相关的知识点,将明白的一些摘录以下,对现有的集合类有个大概的了解,重要的是开发遇到问题时能及时解决。
集合类存放于java.util包中。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象
就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
(1)集
集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合
中,就像往口袋里放东西。
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按
照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了
对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。
(2)列表
列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当
然,它与根本没有顺序的集是不同的。
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。
关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。
(3)映射
映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个
相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供
相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。
关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生
一个被称作散列码(hash code)的整数值,
散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此
确定关键字/对象对的存储位置。理想情况下,散列处理应该产生给定范围内均匀分布的值
,而且每个关键字应得到不同的散列码。
Collection
--List:-----------------------以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
---ArrayList
---LinkedList
---Vector
--Set :----------------------- 不含有重复的元素
--- HashSet
--- TreeSet
Map
---HashMap
---HashTable
---TreeMap
补充:
List,Set,Map将存入的数据一律视为Object类型。
Collection、List、Set、Map都是接口,不能实例化。继承自它们的 ArrayList, Vector, HashTable,HashMap是具象class,这些才可被实例化。
实现了Collection接口的子类都有一个iterator()方法,通过调用该方法可以返回Iterator类型的一个对象,使用该对象即可取出所要的值。代码如下:
Iterator it=c.iterator()
String s = (String)it.next();
这只是取出其中的一条数据,要想把所有的都取出来,可以用循环
for(Iterator it=c.iterator();it.hasNext();){
String s = (String)it.next();
}
实现了Collection接口的子类都可以用类似上述的方法存取数据。
HashMap
HashMap不同于Collection,它的对象没有iterator()方法,但它有一个values()方法,调用此方法后返回的是Collection对象,通过返回的对象可调用iterator()方法,从而实现取数据。
取数据的两种方法
第一种
Iterator itt = hm1.values().iterator();
book bkex = (book) itt.next();
取出的是第一条记录,在此注意的是后存的先取[至于为什么我也说不清楚]
第二种
book tempbook =(book)hm1.get("book3");
这样可以直接根据名字取出对应的记录。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参
数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个
Collection。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使
用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
List, Set, Map是否继承自Collection接口? List,Set是 Map不是
ArrayList和Vector的区别。
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
HashMap和Hashtable的区别
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value