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方法比较相等,同时两个对象的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集合提供Set<K>keySet()方法返回所有key组成的set集合。由此可见,Map集合中的所有key具有set集合的特征,只要Map所有的key集中起来,它就是一个Set集合,这就实现了Map到Set的转换。同时,如果把Map中的元素看成key-value的set集合,也可以实现从Set到Map之间的转换。HashSet和HashMap分别作为它们的实现类。两者之间也挺相似的。HashSet的实现就是封装了HashMap对象来存储元素。它们的本质是一样的。类似于HashSet和HashMap的关系,其实TreeMap和TreeSet本质也差不多,TreeSet底层也是依赖TreeMap实现。
Map与List的关系。把Map的key-value分开来看,从另一个角度看,就可以把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。
HashSet与HashMap的性能选项。主要有两个方面:容量和负载因子(尺寸/容量)。较低负载因子会增加查询数据的性能,但是会降低hash表所占的内存开销。较高负载因子则反之,一般对数据的查询比较频繁,所以一般情况下初始容量应该大一点,但也不能太大,否则浪费内存空间。
总结二:java集合总结
Set:不区分元素的顺序,不允许出现重复的值
list:区分元素的顺序,且允许出现重复的值
map:采用key——values的,不允许有重复的键,每个键最多对应一个值
java集合只能保存引用类型的数据,是对象的引用
Collection接口描述set和list集合类型的根接口
相关方法:
add()如果增加重复元素,则增加失败,返回false
contains()判断是否包含有某个元素
iterator()返回成一个迭代器
List可以对元素的插入位置进行精确控制,根据元素索引访问元素等功能
set(index,elemetn)修改指定索引下的元素
Map关系集的形式查看某个映射的内容
put(objectkey,objectvalues)增加一个新的值
get(objectkey)查找key上面的值
SetkeySet()将所有的key返回到一个set中
Collectionvalues()将所有的值返回到一个collection集合中
Collection——set——hashset/treeset
Collection--list——Arraylist/vector——Stack(栈)
Map——hashmap/Treemap/hashtable——properties
StringTokenizer——Enumeration(不是很常用)
ArrayList类实现了list接口,用于表述长度可度的数组列表
他允许取值为null,除实现了list接口的所有功能外,还有以下方法
ArrayList()创建一个容量为10的null的列表
ArrayList()创建一个指定长度的null的列表
ensureCapacity(intminCapacity)增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
trimToSize()将此ArrayList实例的容量调整为列表的当前大小(也就是说,出除后面为null的值)
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16964.html
Vector也实现了list接口,其描述的也是可变长度的对象数组
是同步(线程安全的),运行效率要低一些,主要用于多线程环境中,而arryalist是不同步的,适合在单纯种环境中使用
vector()创建一个长度为10的vector容器
elementAt(intindex)得到指定的值
addElement(Objectojb)增加值
removeElementAt(intindex)移除指定的值
insertElecentAt(Eobj,index)在指定位置查入相关的值
removeElement(objectobj)删除值,如果有重复的只删除第一次出现的
Object[]toArray()将当前集合中的元素全部返回到一个数组中
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16965.html
Stack继承了vector,对应了数据结构中的“后进先出”存储和操作数据结象栈
Stack()创建一个空的栈
push()在当前栈中压入一个数据,把项压入堆栈顶部。
pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。
peek()查看堆栈顶部的对象,但不从堆栈中移除它。
clear()清空栈
search(objecto)查看栈中的位置,返回最进的一个。以1为基数
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16966.html
Iterator接口描述的是以统一方式对各种集合元素遍历/迭代工具,也称"迭代器"
允许在遍历过程中移除集合中的元素
hasNext()如果仍有元素可以迭代,则返回true
next()返回迭代的下一个元素
remove()从迭代器指向的collection中移除迭代器返回的最后一个元素
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16967.html
HashSet类实现了set接口,描述典型的set集合结构
不允许出现重复元素,不保证集合中元素的序
允许包含值为null的元素,但最多只能有一个,
相关实例请查看http://hi.bccn.net/space-447825-do-blog-id-16968.html
TreeSet类也实现了Set,它描述的是set的一种变体——可以实现排序功能的集合
将对象元素添加到TreeSet集中时会自动按照某种比较规则将其插入到有序的对象序列中
以保证TreeSet集合元素组成的对象序列时刻按照“升序”排列
相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16969.html
Comparable接口中定义的compareTo()方法,实现对整体排序所需的比较逻辑
排序称为自然排序,和自然比较
如果重写了,compareTo()那么要保证equals()保持一致
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16971.html
HashMap实现了Map接口,基于哈希表的实现了前述的映射集合结构
不保证其中元素的先后顺序,并且允许null值和null键
当集合中不存在当前检索的,get()返回的是空,而不会报错
影响hashMap性能的两个参数:初始容量和加载因子
相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16972.html
Hashtable也是采用键和值,键和值不允许为null,是同步的,即线程安全的,效率相对要低一些,用于多线程,用法与hashmap完全一样
Enumeration接口:作用与iterator接口类似,但只提供遍历vector和hashtable(及子类properties)且不支持集合元素的移除操作些接口不是很常用,这里就不给实例了
Collections定义了多种集合操作的方法,实现对集合元素排序,取极值,批是拷贝,集合结构转换,循环移位以及匹配检查等功能
相关方法:
sort(List<T>list)根据元素的自然顺序对指定列表按升序进行排序。
reverse(List<?>list)反转指定列表中元素的顺序。
shuffle(List<?>list)使用默认随机源对指定列表进行置换。
copy(List<?superT>dest,List<?extendsT>src)将所有元素从一个列表复制到另一个列表。
list(Enumeration<T>e)返回一个数组列表,它按返回顺序包含指定枚举返回的元素
frequency(Collection<?>c,Objecto)返回指定collection中等于指定对象的元素数
max(Collection<?extendsT>coll)根据指定比较器产生的顺序,返回给定collection的最大元素
rotate(List<?>list,intdistance)根据指定的距离轮换指定列表中的元素。
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16973.html
Arrays类定义了多种数组操作方法,实现了对数组元素排序,填充,转换为列表或字符串形式、增强的检索和深度比较等功能
asList()返回一个受指定数组支持的固定大小的列表
sort()对指定的byte型数组按数字升序进行排序
binarySearch(int[]a,intkey)使用二分搜索法来搜索指定的int型数组,以获得指定的值。
toString(Object[]a)返回指定数组内容的字符串表示形式。
总结三:java集合总结
一、数组、集合
数组、集合:都是一种容器,用一个对象管理多个对象;
数组:不能自动增长;只能存放同类型的元素
集合:能自动扩容;部分集合允许存放不同类型的元素;
二、学习这些集合类要掌握哪些东西:
1)怎样得到(选择)集合对象;
2)怎样添加元素
3)怎样删除元素
4)怎样循环遍历没一个元素
三、list、set、map
collection:父接口;
Set:接口---一个实现类:HashSet
List:接口---三个实现类:LinkedList,Vector,ArrayList
SortedSet:接口---实现类:TreeSet
1、List:
List:有序列表,允许存放重复的元素;
实现类:
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始;
LinkedList:链表实现,增删快,查询慢
Vector:数组实现,线程安全,重量级
2.Set:
无序集合,不允许存放重复的元素;
实现类HashSet:equals返回true,hashCode返回相同的整数;哈希表;
子接口SortedSet:对Set排序实现类:TreeSet:二叉树实现的;
看API:<E>泛型:表示一个对象;
Iterator:接口,迭代器;
java.util;
hasNext();
next();
remove();
Iterable:可迭代的,访问的;
java.lang;实现了可迭代的接口就可以用迭代的方式访问;
只需实现iterator();方法即可;Iteratoriterator();
三种循环的访问方式:
只有实现了Iterable接口的才能用第三种;能用第二种的也一定能用第三种;
ArrayList:自动扩容,是数组照搬过来的;
3.Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;
HashSet的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;
如果有两个Key重复,那么会覆盖之前的;
Hashtable:线程安全的
Properties:java.util.Properties;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表示选课人数;
map.put(cou,map.get(cou)+newInteger(1));
四、Hashtable、Properties
1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非null对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals法。
2,Properties:继承自Hashtable,比Hashtable更严格属性列表中每个键及其对应值都是一个字符串。
常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);
用法:我在C盘下建了一个名为yy.dat的文件,文件的内容为:
name=hehe
password=12345
执行以下程序,输出hehe,可见用Properties可以很方便的解析配置文件
Propertiesp=newProperties();
p.load(newFileInputStream("C:\\yy.dat"));
System.out.println(p.getProperty("name"))
五、两个工具类Arrays和Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂
2.Collections、主要提供了在collection上进行操作的静态方法
六、遗留的几个类
1.Hashtable,作用和HashMap相同,不过它是线程安全的,如果不需要线程安全,应该使用HashMap
2.Enumeration,遗留集合使用枚举接口来遍历元素,它有两个方法,hasMoreElements和nextElement,用法类似Iterator。
3.Stack,继承自Vector,实现了栈的功能,提供了push()方法押栈和pop()方法出栈。
4.BitSet,位集。如果需要高效率的存储一个位序列,例如一个标志序列,请使用位集。它可以对各个位进行
读取get(i)
设置set(i)
清楚clear(i)
七、常见笔试题目汇总
1.Collection和Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
2.List,Set,Map是否继承自Collection接口?
List,Set是,Map不是
3.两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
不对,有相同的hashcode。
4.你所知道的集合类都有哪些?主要方法?
最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。
Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
5.排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
//使用快速排序方法对a[0:n-1]排序
从a[0:n-1]中选择一个元素作为middle,该元素为支点
把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点
递归地使用快速排序方法对left进行排序
递归地使用快速排序方法对right进行排序
所得结果为left+middle+right
6.HashMap和Hashtable的区别
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。
7.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
java集合类主要由两个接口派生:Collection和Map,是集合框架的根接口。下面是其接口、子接口和实现类的继承树。
下面就一一介绍四大接口及其实现类。
Set接口。set集合不允许包含相同的元素。set判断两个对象是否相同是根据equals方法。如果两个对象用equals方法返回的是true,set不会接受这两个对象。
HashSet是set接口的典型实现,HashSet按hash算法来存储集合中的元素。因此具有很好的存储和查找性能。HashSet判断两个元素的标准是两个元素的equals方法比较相等,同时两个对象的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集合提供Set<K>keySet()方法返回所有key组成的set集合。由此可见,Map集合中的所有key具有set集合的特征,只要Map所有的key集中起来,它就是一个Set集合,这就实现了Map到Set的转换。同时,如果把Map中的元素看成key-value的set集合,也可以实现从Set到Map之间的转换。HashSet和HashMap分别作为它们的实现类。两者之间也挺相似的。HashSet的实现就是封装了HashMap对象来存储元素。它们的本质是一样的。类似于HashSet和HashMap的关系,其实TreeMap和TreeSet本质也差不多,TreeSet底层也是依赖TreeMap实现。
Map与List的关系。把Map的key-value分开来看,从另一个角度看,就可以把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。
HashSet与HashMap的性能选项。主要有两个方面:容量和负载因子(尺寸/容量)。较低负载因子会增加查询数据的性能,但是会降低hash表所占的内存开销。较高负载因子则反之,一般对数据的查询比较频繁,所以一般情况下初始容量应该大一点,但也不能太大,否则浪费内存空间。
总结二:java集合总结
Set:不区分元素的顺序,不允许出现重复的值
list:区分元素的顺序,且允许出现重复的值
map:采用key——values的,不允许有重复的键,每个键最多对应一个值
java集合只能保存引用类型的数据,是对象的引用
Collection接口描述set和list集合类型的根接口
相关方法:
add()如果增加重复元素,则增加失败,返回false
contains()判断是否包含有某个元素
iterator()返回成一个迭代器
List可以对元素的插入位置进行精确控制,根据元素索引访问元素等功能
set(index,elemetn)修改指定索引下的元素
Map关系集的形式查看某个映射的内容
put(objectkey,objectvalues)增加一个新的值
get(objectkey)查找key上面的值
SetkeySet()将所有的key返回到一个set中
Collectionvalues()将所有的值返回到一个collection集合中
Collection——set——hashset/treeset
Collection--list——Arraylist/vector——Stack(栈)
Map——hashmap/Treemap/hashtable——properties
StringTokenizer——Enumeration(不是很常用)
ArrayList类实现了list接口,用于表述长度可度的数组列表
他允许取值为null,除实现了list接口的所有功能外,还有以下方法
ArrayList()创建一个容量为10的null的列表
ArrayList()创建一个指定长度的null的列表
ensureCapacity(intminCapacity)增加此ArrayList实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
trimToSize()将此ArrayList实例的容量调整为列表的当前大小(也就是说,出除后面为null的值)
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16964.html
Vector也实现了list接口,其描述的也是可变长度的对象数组
是同步(线程安全的),运行效率要低一些,主要用于多线程环境中,而arryalist是不同步的,适合在单纯种环境中使用
vector()创建一个长度为10的vector容器
elementAt(intindex)得到指定的值
addElement(Objectojb)增加值
removeElementAt(intindex)移除指定的值
insertElecentAt(Eobj,index)在指定位置查入相关的值
removeElement(objectobj)删除值,如果有重复的只删除第一次出现的
Object[]toArray()将当前集合中的元素全部返回到一个数组中
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16965.html
Stack继承了vector,对应了数据结构中的“后进先出”存储和操作数据结象栈
Stack()创建一个空的栈
push()在当前栈中压入一个数据,把项压入堆栈顶部。
pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。
peek()查看堆栈顶部的对象,但不从堆栈中移除它。
clear()清空栈
search(objecto)查看栈中的位置,返回最进的一个。以1为基数
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16966.html
Iterator接口描述的是以统一方式对各种集合元素遍历/迭代工具,也称"迭代器"
允许在遍历过程中移除集合中的元素
hasNext()如果仍有元素可以迭代,则返回true
next()返回迭代的下一个元素
remove()从迭代器指向的collection中移除迭代器返回的最后一个元素
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16967.html
HashSet类实现了set接口,描述典型的set集合结构
不允许出现重复元素,不保证集合中元素的序
允许包含值为null的元素,但最多只能有一个,
相关实例请查看http://hi.bccn.net/space-447825-do-blog-id-16968.html
TreeSet类也实现了Set,它描述的是set的一种变体——可以实现排序功能的集合
将对象元素添加到TreeSet集中时会自动按照某种比较规则将其插入到有序的对象序列中
以保证TreeSet集合元素组成的对象序列时刻按照“升序”排列
相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16969.html
Comparable接口中定义的compareTo()方法,实现对整体排序所需的比较逻辑
排序称为自然排序,和自然比较
如果重写了,compareTo()那么要保证equals()保持一致
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16971.html
HashMap实现了Map接口,基于哈希表的实现了前述的映射集合结构
不保证其中元素的先后顺序,并且允许null值和null键
当集合中不存在当前检索的,get()返回的是空,而不会报错
影响hashMap性能的两个参数:初始容量和加载因子
相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16972.html
Hashtable也是采用键和值,键和值不允许为null,是同步的,即线程安全的,效率相对要低一些,用于多线程,用法与hashmap完全一样
Enumeration接口:作用与iterator接口类似,但只提供遍历vector和hashtable(及子类properties)且不支持集合元素的移除操作些接口不是很常用,这里就不给实例了
Collections定义了多种集合操作的方法,实现对集合元素排序,取极值,批是拷贝,集合结构转换,循环移位以及匹配检查等功能
相关方法:
sort(List<T>list)根据元素的自然顺序对指定列表按升序进行排序。
reverse(List<?>list)反转指定列表中元素的顺序。
shuffle(List<?>list)使用默认随机源对指定列表进行置换。
copy(List<?superT>dest,List<?extendsT>src)将所有元素从一个列表复制到另一个列表。
list(Enumeration<T>e)返回一个数组列表,它按返回顺序包含指定枚举返回的元素
frequency(Collection<?>c,Objecto)返回指定collection中等于指定对象的元素数
max(Collection<?extendsT>coll)根据指定比较器产生的顺序,返回给定collection的最大元素
rotate(List<?>list,intdistance)根据指定的距离轮换指定列表中的元素。
相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16973.html
Arrays类定义了多种数组操作方法,实现了对数组元素排序,填充,转换为列表或字符串形式、增强的检索和深度比较等功能
asList()返回一个受指定数组支持的固定大小的列表
sort()对指定的byte型数组按数字升序进行排序
binarySearch(int[]a,intkey)使用二分搜索法来搜索指定的int型数组,以获得指定的值。
toString(Object[]a)返回指定数组内容的字符串表示形式。
总结三:java集合总结
一、数组、集合
数组、集合:都是一种容器,用一个对象管理多个对象;
数组:不能自动增长;只能存放同类型的元素
集合:能自动扩容;部分集合允许存放不同类型的元素;
二、学习这些集合类要掌握哪些东西:
1)怎样得到(选择)集合对象;
2)怎样添加元素
3)怎样删除元素
4)怎样循环遍历没一个元素
三、list、set、map
collection:父接口;
Set:接口---一个实现类:HashSet
List:接口---三个实现类:LinkedList,Vector,ArrayList
SortedSet:接口---实现类:TreeSet
1、List:
List:有序列表,允许存放重复的元素;
实现类:
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始;
LinkedList:链表实现,增删快,查询慢
Vector:数组实现,线程安全,重量级
2.Set:
无序集合,不允许存放重复的元素;
实现类HashSet:equals返回true,hashCode返回相同的整数;哈希表;
子接口SortedSet:对Set排序实现类:TreeSet:二叉树实现的;
看API:<E>泛型:表示一个对象;
Iterator:接口,迭代器;
java.util;
hasNext();
next();
remove();
Iterable:可迭代的,访问的;
java.lang;实现了可迭代的接口就可以用迭代的方式访问;
只需实现iterator();方法即可;Iteratoriterator();
三种循环的访问方式:
只有实现了Iterable接口的才能用第三种;能用第二种的也一定能用第三种;
ArrayList:自动扩容,是数组照搬过来的;
3.Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;
HashSet的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;
如果有两个Key重复,那么会覆盖之前的;
Hashtable:线程安全的
Properties:java.util.Properties;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表示选课人数;
map.put(cou,map.get(cou)+newInteger(1));
四、Hashtable、Properties
1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非null对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals法。
2,Properties:继承自Hashtable,比Hashtable更严格属性列表中每个键及其对应值都是一个字符串。
常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);
用法:我在C盘下建了一个名为yy.dat的文件,文件的内容为:
name=hehe
password=12345
执行以下程序,输出hehe,可见用Properties可以很方便的解析配置文件
Propertiesp=newProperties();
p.load(newFileInputStream("C:\\yy.dat"));
System.out.println(p.getProperty("name"))
五、两个工具类Arrays和Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂
2.Collections、主要提供了在collection上进行操作的静态方法
六、遗留的几个类
1.Hashtable,作用和HashMap相同,不过它是线程安全的,如果不需要线程安全,应该使用HashMap
2.Enumeration,遗留集合使用枚举接口来遍历元素,它有两个方法,hasMoreElements和nextElement,用法类似Iterator。
3.Stack,继承自Vector,实现了栈的功能,提供了push()方法押栈和pop()方法出栈。
4.BitSet,位集。如果需要高效率的存储一个位序列,例如一个标志序列,请使用位集。它可以对各个位进行
读取get(i)
设置set(i)
清楚clear(i)
七、常见笔试题目汇总
1.Collection和Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
2.List,Set,Map是否继承自Collection接口?
List,Set是,Map不是
3.两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?
不对,有相同的hashcode。
4.你所知道的集合类都有哪些?主要方法?
最常用的集合类是List和Map。List的具体实现包括ArrayList和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情形。
Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
5.排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)
快速排序的伪代码。
//使用快速排序方法对a[0:n-1]排序
从a[0:n-1]中选择一个元素作为middle,该元素为支点
把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点
递归地使用快速排序方法对left进行排序
递归地使用快速排序方法对right进行排序
所得结果为left+middle+right
6.HashMap和Hashtable的区别
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap类没有分类或者排序。它允许一个null键和多个null值。
Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。
7.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。
equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。