一、集合:集合主要分为Collection,Map
二、Collection接口
1、List接口:大量连续有序的元素 。
ArrayList:基于动态数组的实现。是 线程不同步的,如果需要让其线程同步操作,可以使用Collection.synchronized(list)对列表实现同步。容量不足时,自动增长容量一半。
Vector:基于动态数组的实现。是 线程同步的。容量不足时,容量自动翻倍。LinkedList:基于链表的实现,元素存储不连续。通过元素的指针进行连接。是 线程不安全的。
2、Set接口:存储大量无序的元素。Set集合不允许出现重复元素。相当于数学的集合概念
HashSet:基于Hash表的顺序进行排序。若两个元素的Hash值一样,会产生覆盖。TreeSet:基于元素的 自然顺序进行排序(元素实现Comparable接口)实现排序。或者通过Comparator接口完成元素的存储。
三、Map接口:以键值对结构存储元素,一般一个键对应一个值,键不允许重复,但是值可以
HashMap: 允许放入一个空的键或值,基于Hash表的顺序对于映射关系中的键排序。在存储元素是不允许键的重复,但允许值的重复。TreeMap: 不允许放入空键,基于红黑树的一种映射实现,元素的排序按照键的 自然顺序排序(元素必须实现Comparable接口)实现。或者通过Comparator接口完成元素的存储。Hashtable: 不允许放入空键或值,从老式的Dictionary类继承,新增对Map接口的实现。Hashtable 是线程同步的。
四、Iterator:集合元素迭代器,在进行迭代时候。不要使用集合自带add和remove方法。需要使用Iterator的remove方法。
ListIterator:动态数组的迭代器。可以反向迭代,但是反向迭代时候需要指针不在最前面。可以在迭代时候set,add,remove。List list = new ArrayList<String>();Iterator it = list.iterator();
while(it.hasNext){String s= it.next();
}
五、关于Collection排序
1、匿名内部类方式
public
static
void
main(String[]
args
) {
ArrayList<String>
a
=
new
ArrayList<>();
a
.add(
"阿玲"
);
a
.add(
"刘德华"
);
a
.add(
"劉德華"
);
a
.add(
"吳為"
);
a
.add(
"吴为"
);
a
.add(
"喵喵"
);
Collections.
sort
(
a
,
new
Comparator<String>() {//
Collections是一个在Collection上操作的工具类。
可以实现对集合元素的排序
@Override
public
int
compare(String
o1
, String
o2
) {
return
Collator.
getInstance
(Locale.
CHINA
).compare(
o1
,
o2
);//
Collator是一个支持简体汉语的比较的抽象类。简单字符串比较可以调用String自带比较方法
}
});
for
(String
string
:
a
) {
System.
out
.println(
string
);
}
}
2、实现Comparator接口方式。然后再调用Collections.sort(List list,new SortMethod( ) )方法
public
class
SortMethod
implements
Comparator<Student>
{
private
String
type
;
private
boolean
type1
;
public
SortMethod(String
type
,
boolean
type1
) {
super
();
this
.
type
=
type
;
this
.
type1
=
type1
;
}
@Override
public
int
compare(Student
o1
, Student
o2
) {
int
i
= 0;
if
(
type
.equals(
"id"
)) {
i
=
o1
.getId() -
o2
.getId();
}
else
if
(
type
.equals(
"name"
)) {
i
=
o1
.getName().compareTo(
o2
.getName());
}
else
if
(
type
.equals(
"birthday"
)) {
i
=
o1
.getBirthday().compareTo(
o2
.getBirthday());
}
if
(
type1
)
return
i
;
else
{
return
-
i
;
}
}
}
3、需要比较对象继承Compartable接口,并重写CompareTo方法。然后调用Collections.sort(List list)方法
public
class
Student
implements
Comparable<Student>{
private
String
name
;
private
int
id
;
private
Date
birthday
;
public
Student(String
name
,
int
id
,Date
birthday
) {
super
();
this
.
name
=
name
;
this
.
birthday
=
birthday
;
this
.
id
=
id
;
}
@Override
public
int
compareTo(Student
o
) {
return
this
.
birthday
.compareTo(
o
.
birthday
);
}
}