2023年12月24日发(作者:)

java集合总结

一、数组、集合

数组、集合:都是一种容器,用一个对象管理多个对象;

数组:不能自动增长;只能存放同类型的元素

集合:能自动扩容;部分集合允许存放不同类型的元素;

二、学习这些集合类要把握哪些东西:

1〕怎样得到〔选择〕集合对象;

2〕怎样添加元素

3〕怎样删除元素

4〕怎样循环遍历没一个元素

三、list、set、map

collection:父接口;

Set:接口一个实现类:HashSet

List:接口三个实现类:LinkedList,Vector,ArrayList

SortedSet:接口实现类:TreeSet

1、List:

List:有序列表,允许存放重复的元素;

实现类:

ArrayList:数组实现,查询快,增删慢,线程担心全,轻量级;下标也是从0开头;

LinkedList:链表实现,增删快,查询慢

Vector:数组实现,线程平安,重量级

第 1 页

:

无序集合,不允许存放重复的元素;

实现类HashSet:equals返回true,hashCode返回相同的整数;哈希表;

子接口SortedSet:对Set排序实现类:TreeSet:二叉树实现的;

看API:E泛型:表示一个对象;

Iterator:接口,迭代器;

hasNext();

next();

remove();

Iterable:可迭代的,访问的;

ng;实现了可迭代的接口就可以用迭代的方式访问;

只需实现iterator();方法即可;Iteratoriterator();

三种循环的访问方式:

只有实现了Iterable接口的才能用第三种;能用其次种的也肯定能用第三种;

ArrayList:自动扩容,是数组照搬过来的;

HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;

第 2 页

HashSet的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只供应key的访问;

假如有两个Key重复,那么会掩盖之前的;

Hashtable:线程平安的

Properties:ties;key和value都是String类型,用来读配置文件;

HashMap与Hashtable区分:

HashMap线程担心全的,允许null作为key或value;

Hashtable线程平安的,不允许null作为key或value;

TreeMap:对key排好序的Map;key就是TreeSet,value对应每个key;

key要实现Comparable接口或TreeMap有自己的构造器;

HashSet:remove(Objecto)的原则看这个对象O的Hashcode和equals是否相等,并不是看是不是一个对象;

定义一个Map;key是课程名称,value是Integer表示选课人数;

(cou,(cou)+newInteger(1));

四、Hashtable、Properties

1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非null对象都可以用作键或值。为了胜利地在哈希表中存储和猎取对象,用作键的对象必需实现hashCode方法和equals法。

第 3 页

2,Properties:继承自Hashtable,比Hashtable更严格属性列表中每个键及其对应值都是一个字符串。

常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);

用法:我在C盘下建了一个名为的文件,文件的内容为:

name=hehe

password=12345

执行以下程序,输出hehe,可见用Properties可以很便利的解析配置文件

Propertiesp=newProperties();

(newFileInputStream("C:"));

n(perty("name"))

五、两个工具类Arrays和Collections

、此类包含用来操作数组〔比方排序和搜寻〕的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂

tions、主要供应了在collection上进行操作的静态方法

六、遗留的几个类

ble,作用和HashMap相同,不过它是线程平安的,假如不需要线程平安,应当使用HashMap

ation,遗留集合使用枚举接口来遍历元素,它有两个

第 4 页

方法,hasMoreElements和nextElement,用法类似Iterator。

,继承自Vector,实现了栈的功能,供应了push()方法押栈和pop()方法出栈。

,位集。假如需要高效率的存储一个位序列,例如一个标志序列,请使用位集。它可以对各个位进行

读取get(i)

设置set(i)

清晰clear(i)

七、常见笔试题目汇总

tion和Collections的区分。

Collection是集合类的上级接口,继承与他的接口主要有Set和List.

Collections是针对集合类的一个关心类,他供应一系列静态方法实现对各种集合的搜寻、排序、线程平安化等操作。

,Set,Map是否继承自Collection接口?

List,Set是,Map不是

3.两个对象值相同((y)==true),但却可有不同的hashcode,这句话对不对?

不对,有相同的hashcode。

4.你所知道的集合类都有哪些?主要方法?

最常用的集合类是List和Map。List的详细实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储

第 5 页

和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。

Map供应了一个更通用的元素存储方法。Map集合类用于存储元素对〔称作"键"和"值"〕,其中每个键映射到一个值。

5.排序都有哪几种方法?请列举。用JAVA实现一个快速排序。

排序的方法有:插入排序〔直接插入排序、希尔排序〕,交换排序〔冒泡排序、快速排序〕,选择排序〔直接选择排序、堆排序〕,归并排序,安排排序〔箱排序、基数排序〕

快速排序的伪代码。

//使用快速排序方法对a[0:n1]排序

从a[0:n1]中选择一个元素作为middle,该元素为支点

把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点

递归地使用快速排序方法对left进行排序

递归地使用快速排序方法对right进行排序

所得结果为left+middle+right

p和Hashtable的区分

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap类没有分类或者排序。它允许一个null键和多个null值。

Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,由于它是同步的。

第 6 页

里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()它们有何区分?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

equals()是判读两个Set是否相等。

equals()和==方法确定引用值是否指向同一对象equals()在类中被掩盖,为的是当两个分别的对象的内容和类型相配的话,返回真值。

java集合总结〔二〕

java集合类主要负责保存、盛装其他数据,因此集合类也称容器类。java集合类分为:set、list、map、queue四大体系。其中set代表无序、不行重复的集合;list代表有序、可重复的集合。map代表具有映射关系的集合;queue代表队列集合。

java集合类主要由两个接口派生:Collection和Map,是集合框架的根接口。下面是其接口、子接口和实现类的继承树。

下面就一一介绍四大接口及其实现类。

Set接口。set集合不允许包含相同的元素。set推断两个对象是否相同是依据equals方法。假如两个对象用equals方法返回的是true,set不会接受这两个对象。

HashSet是set接口的典型实现,HashSet按hash算法来存储集合中的元素。因此具有很好的存储和查找性能。HashSet推断两个元素的标准是两个元素的equals方法比较相等,同时两个对象的

第 7 页

hasCode()方法返回值也相等。HashSet可以保存null元素。

List集合代表一个有序集合。集合中的每个元素都有其对应的挨次索引。Arraylist和vector是list接口的两个典型实现。他们之间的显着区分就是:vector是线性平安的,而arraylist不是。它们两个都是基于数组实现的'list类。List还有一个基于链表实现的LinkedList类。当插入、删除元素的速度特别快。这个类比较特别,功能也特殊多,即实现了List接口,也实现了Dueue接口(双向队列)。可以当成双向队列使用,也可以当成栈使用。

Queue用于模拟队列的数据结构。LinkedList和ArrayDueue是其两个比较常用的实现类。

Map用于保存具有映射关系的数据。Map接口有如下几个常用的实现类:HashMap、HashTable、TreeMap。TreeMap是基于红黑树对TreeMap中全部key进行排序。HashMap和HashTable主要区分有两点:1、Hashtable是线性平安的,因此性能差些。2、HashMap可以使用null作为key或者value。

集合类还供应了一个工具类Collections。主要用于查找、替换、同步掌握、设置不行变集合。

上面是对java集合类的一般概述,下面就set、list、map三者之间的关系进行剖析。

Set与Map的关系。Map集合中全部key集中起来,就组成了一个set集合。所以Map集合供应SetKkeySet()方法返回全部key组成的set集合。由此可见,Map集合中的全部key具有set集合的

第 8 页

特征,只要Map全部的key集中起来,它就是一个Set集合,这就实现了Map到Set的转换。同时,假如把Map中的元素看成keyvalue的set集合,也可以实现从Set到Map之间的转换。HashSet和HashMap分别作为它们的实现类。两者之间也挺相像的。HashSet的实现就是封装了HashMap对象来存储元素。它们的本质是一样的。类似于HashSet和HashMap的关系,其实TreeMap和TreeSet本质也差不多,TreeSet底层也是依靠TreeMap实现。

Map与List的关系。把Map的keyvalue分开来看,从另一个角度看,就可以把Map与List统一起来。

Map集合是一个关联数组,key可以组成Set集合,Map中的value可以重复,所以这些value可以组成一个List集合。但是需要留意的是,实质Map的values方法并未返回一个List集合。而是返回一个不存储元素的Collection集合,换一种角度来看对List集合,它也包含了两组值,其中一组就是虚拟的int类型的索引,另一组就是list集合元素,从这个意思上看,List就相当于全部key都是int型的Map。

下面讲解几个相像类之间的差异。

ArrayList和LinkedList。ArrayList是一种挨次存储的线性表,其底层是采纳数组实现的,而LinkedList是链式存储的线性表。其本质就是一个双向链表。对于随机存储比较常见的元素操作应选用ArrayList,对于常常需要增加、删除元素应当选用LinkedList。但总的来说ArrayList的总体性能还是优于LinkedList。

第 9 页

HashSet与HashMap的性能选项。主要有两个方面:容量和负载因子(尺寸/容量)。较低负载因子会增加查询数据的性能,但是会降低hash表所占的内存开销。较高负载因子则反之,一般对数据的查询比较频繁,所以一般状况下初始容量应当大一点,但也不能太大,否则铺张内存空间。

第 10 页