JAVA
集合框架
主要接口 * Collection * Map
帮助类 * Collections
排序方式 * 自然排序 * 客户排序
一.
Collection
接口
它包括
List,Set
接口
1.
List
接口
特点:
它是一种线性的,按照索引在排序的序列,它允许元素重复和允许按照索引来查找元素。
子类:
ArrayList
:
采用数组数据结构,相当于一个可改变容量大小的数组
(Array)
,查找元素速度快
LinkedList
:
由于采用链式表的结构,所以插入和删除元素很方便
Vector:
和
ArrayLis
t
相似,只是所有方法是同步的
2.
Set
接口
特点:
它不可以按照顺序排列,是把
HashCode
为索引贮存一个数组中,它的元素不可以有重复的,但是它的子类有的可以按照特定顺序排列。当一个元素被加入时,会计算它的哈希码值,然后按照这个来计算它应该放在哪个位置。
采用
equals
来判断对象是否相等,而不是
”==”
.
子类:
HashSet
:
它利用哈希算法来存贮元素,存取速度很快,它还有个子类
LinkedHashSet,
它更是实现了链表结构。
TreeSet
:
它实现了
SortedSet
接口,具有排序功能。
二.
Map
接口
特点:
它的每一个元素中都是一个
(Key,Value)
类型的对象,可以通过它的键来查找相应的值,它的键值不允许有重复,但是值却可以重复。
可以分别取出所有的键
(Key) ----keySet(),
值
(Value)---values(),
然而不同的是前者得到的是一个
Set
,
后者则是
Collection.
子类:
HashMap:
由于它实现了哈希算法,所以存取键对象都很方便。和
HashSet
一样
,
要求当两个键对象通过
equals()
方法比较为
true
时
,
这两个键对象的
hashCode()
方法返回的哈希码也一样
.
它允许元素为键为
Null,
值为
Null
,默认储存键值的数组长度为
16
。
(2
的指数
)
TreeMap:
和
TreeSet
一样实现了
SortedMap
接口,所以它可以实现排序功能。并支持自然排序和客户排序两种方式。
HashTable:
它的方法和
Vector
一样都是线程安全的
,
它不允许元素为
null,
迭代元素时不用
Iterator,
而是用
Enumeration
。其默认储存键值的数组长度为
11,
增长方式是
oldValue*2+1.
三.帮助类(
Collections
)
它拥有一些静态方法,来操作集合类。
Sort(List list)
:
采用自然排序功能
Sort(List list,Comparator compartor)
:
采用定制的排序方式进行排序
Max(collection)
:
取得集合中的最大值
Reserve(list)
:
将
LIST
中的元素位置调换
Get(listIterator,index)
:
取得指定集合的指定位置的元素
Etc.
四
.
排序方式
1.
自然排序
在
JAVA
中有一些类实现了
Comparable
接口,或者一些默认的
(int,String,double..)
就实现了。这样就可以在加入到可排序的集合中时按照升序自动排序。
2.
客户排序
如果想定制排序方式,另一个接口可以帮助实现
Comparator
接口。
例如:如果想把一个用户类的实例加入集合时实现定制排序,则可以这样做
class UserComparator implements Comparator{
public int compare(Object o1,Object o2){
User u1=(User)o1;
User u2=(User)o2;
if(u1.getName().compareTo(u2.getName())>0)
return 1;
if(u1.getName().compareTo(u2.getName())<0)
return -1;
return 0;
}
}
----------------------------------------------------------------
class User{
public User(String name){
setName(name);
}
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
------------------------------------------------------------------
接下来以
TreeSet
为例,实现定制排序。
//param1: new User() ,because it had implemented Comparator
TreeSet treeSet=new TreeSet(new User());
User u1=new User(“abc”);
User u2=new User(“bac’);
User u3=new User(”cba”);
treeSet.add(u1);
treeSet.add(u2);
treeSet.add(u3);
Iterator i=treeSet.iterator();
while(i.hasNext()){
User user=(User)i.next();
System.out.print(user.getName());
}
输出结果为:
cba bac abc