您的位置:首页 > 编程语言 > Java开发

java集合总结(转载)

2015-07-01 11:19 453 查看
讲集合collection之前,我们先分清三个概念:

colection 集合,用来表示任何一种数据结构
Collection 集合接口,指的是 java.util.Collection接口,是 Set、List 和 Queue 接口的超类。
Collections工具类指的是:java.util.Collections类

二、几个比较重要的接口和类简介

1、List接口

List 关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。

ArrayList 可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。

LinkedList 中的元素之间是双链接的,当需要快速插入和删除时LinkedList成为List中的不二选择。

Vector 是ArrayList的线程安全版本,性能比ArrayList要低,现在已经很少使用

2、Set接口

Set关心唯一性,它不允许重复。

HashSet 当不希望集合中有重复值,并且不关心元素之间的顺序时可以使用此类。

LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。

TreeSet 当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。)

3、Queue接口

Queue用于保存将要执行的任务列表。

LinkedList 同样实现了Queue接口,可以实现先进先出的队列。

PriorityQueue 用来创建自然排序的优先级队列。

4、Map接口

Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。

HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。

Hashtable 注意Hashtable中的t是小写的,它是HashMap的线程安全版本,现在已经很少使用。

LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。

TreeMap 当需要键值对,并关心元素的自然排序时可采用它。

三、ArrayList的使用

ArrayList是一个可变长的数组实现,读取效率很高,是最常用的集合类型。

1、ArrayList的创建

在Java5版本之前我们使用:

1
List
list =
new
ArrayList();
在Java5版本之后,我们使用带泛型的写法:

1
List<String>
list =
new
ArrayList<String>();
上面的代码定义了一个只允许保存字符串的列表,尖括号括住的类型就是参数类型,也成泛型。带泛型的写法给了我们一个类型安全的集合。关于泛型的知识可以参见这里。

2、ArrayList的使用:

01
List<String>
list =
new
ArrayList<String>();
02
list.add(
"nihao!"
);
03
list.add(
"hi!"
);
04
list.add(
"konikiwa!"
);
05
list.add(
"hola"
);
06
list.add(
"Bonjour"
);
07
System.out.println(list.size());
08
System.out.println(list.contains(
21
));
09
System.out.println(list.remove(
"hi!"
));
10
System.out.println(list.size());
关于List接口中的方法和ArrayList中的方法,大家可以看看JDK中的帮助。

3、基本数据类型的的自动装箱:

我们知道集合中存放的是对象,而不能是基本数据类型,在Java5之后可以使用自动装箱功能,更方便的导入基本数据类型。

1
List<Integer>
list =
new
ArrayList<Integer>();
2
list.add(
new
Integer(
42
));
3
list.add(
43
);
4、ArrayList的排序:

ArrayList本身不具备排序能力,但是我们可以使用Collections类的sort方法使其排序。我们看一个例子:

01
import
java.util.ArrayList;
02
import
java.util.Collections;
03
import
java.util.List;
04
05
public
class
Test
{
06
07
public
static
void
main(String[]
args) {
08
List<String>
list =
new
ArrayList<String>();
09
list.add(
"nihao!"
);
10
list.add(
"hi!"
);
11
list.add(
"konikiwa!"
);
12
list.add(
"hola"
);
13
list.add(
"Bonjour"
);
14
15
System.out.println(
"排序前:"
+
list);
16
17
Collections.sort(list);
18
19
System.out.println(
"排序后:"
+
list);
20
}
21
22
}
编译并运行程序查看结果:

排序前:[nihao!,hi!,konikiwa!,hola,Bonjour]

排序后:[Bonjour,hi!,hola,konikiwa!,nihao!]

5、数组和List之间的转换

从数组转换成list,可以使用Arrays类的asList()方法:

01
import
java.util.ArrayList;
02
import
java.util.Collections;
03
import
java.util.List;
04
05
public
class
Test
{
06
07
public
static
void
main(String[]
args) {
08
09
String[]
sa = {
"one"
,
"two"
,
"three"
,
"four"
};
10
List
list =Arrays.asList(sa);
11
System.out.println(
"list:"
+list);
12
System.out.println(
"list.size()="
+list.size());
13
}
14
15
}
6、Iterator和for-each

在for-each出现之前,我们想遍历ArrayList中的每个元素我们会使用Iterator接口:

01
import
java.util.Arrays;
02
import
java.util.Iterator;
03
import
java.util.List;
04
05
public
class
Test
{
06
07
public
static
void
main(String[]
args) {
08
09
//
Arrays类为我们提供了一种list的便捷创建方式
10
List<String>
list =Arrays.asList(
"one"
,
"two"
,
"three"
,
"four"
);
11
12
//
转换成Iterator实例
13
Iterator<String>
it = list.iterator();
14
15
//遍历
16
while
(it.hasNext())
{
17
System.out.println(it.next());
18
}
19
20
}
21
22
}
在for-each出现之后,遍历变得简单一些:

01
import
java.util.Arrays;
02
import
java.util.Iterator;
03
import
java.util.List;
04
05
public
class
Test {
06
07
public
static
void
main(String[]
args) {
08
09
// Arrays类为我们提供了一种list的便捷创建方式
10
List<String> list = Arrays.asList(
"one"
,
"two"
,
"three"
,
"four"
);
11
12
for
(String s : list) {
13
System.out.println(s);
14
}
15
16
}
17
18
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: