集合

92-集合

集合可以看做一个容器,比如一个班的所有学生可以是一个集合。我们可以往集合里面存放元素,也可以读取集合中的元素,还可以对元素进行排序。Java提供不同的集合类,这些类具有不同的存储对象的方式,可以对集合元素进行遍历、添加、删除、查找。

Java中在java.util包中提供一些集合类,这些集合类称为容器。集合和数组的区别是:数组的长度是固定的,但是集合的长度是可变的。常用的集合有List、Set、Map。


93-List接口的常用方法

List的特征是其元素以线性方式存储,集合中可以存放重复对象。List是接口,List接口主要实现类包括:

  • ArrayList:代表长度可变的数组。可以对元素进行随机的访问,向ArrayList中插入与删除元素的速度慢。(访问速度快,增删速度慢)
  • LinkedList:在实现中采用链表数据结构。插入和删除速度快,访问速度慢。(增删速度快,访问速度慢)

实际上有两种List:一种是基本的ArrayList,其优点在于随机访问元素;另一种是更强大的LinkedList,它并不是为快速随机访问设计的。次序是List最重要的特点:它保证维护元素特定的顺序。

示例代码

List l = new ArrayList();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
l.add(5);
for (int i = 0; i < l.size(); i++) {
	System.out.println(l.get(i));
}Code language: PHP (php)

也可以使用迭代器Iterator遍历里面的元素:

Iterator it = list.iterator();
while (it.hasNext()) {
	System.out.println(it.next());
}Code language: PHP (php)

add(int index, Object obj)方法往集合指定位置添加对象。set方法是替换原来位置的值,然后把旧值返回。

可以使用for的方式调用get(i)获取元素:

for (int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
}Code language: PHP (php)

94-Set接口的常用方法

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。Set集合是不允许重复的,可以通过addAll方法把一个Collection集合的重复内容去掉。

Set接口主要实现了两个实现类:

  • HashSet:按照哈希算法来存取集合中的对象,存取速度比较快
  • TreeSet:实现了SortedSet接口,能够对集合中的对象进行排序

Set存放的是对象的引用,没有重复对象:

for (int i = 0; i < s.size(); i++) {
	//System.out.println(s.get(i)); //set没有顺序 所以不能通过下标的方式获取
}Code language: JavaScript (javascript)

Set的使用示例

Set set = new HashSet();
String s1 = new String("hello");
String s2 = s1;
String s3 = new String("world");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size()); //集合中数目为2Code language: JavaScript (javascript)

迭代器如果没有next的话会导致死循环,需要注意:

while (it.hasNext()) {
	//System.out.println(it.next());
}Code language: JavaScript (javascript)

Set存入的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口,但不保证维护元素的次序。


95-Map映射

Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。Map没有继承于Collection接口。从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。两个实现类:HashMap和TreeMap。

Map的key不一定是数值类型,还可以是字符串类型。

示例代码

Map m = new HashMap();
m.put("zhansan", "18");
m.put("lisi", "23");
m.put("wangwu", "45");
m.put("zhaoliu", "32");Code language: JavaScript (javascript)
Map m = new HashMap();
m.put(1, "k");
m.put("k", 1);
m.put("k", 2); //如果键重复了 则会它的值会覆盖前面的
System.out.println(m.get("k"));
System.out.println(m.get(1));
System.out.println(m.containsKey(1));
System.out.println(m.containsKey(2));

Collection l = m.values();
Iterator it = l.iterator();
while (it.hasNext()) {
	System.out.println(it.next());
}Code language: JavaScript (javascript)

96-迭代器

利用Iterator接口创建迭代器,Iterator接口有3个方法:

  • hasNext():获取下一个元素,如果有则返回true
  • next():返回迭代的下一个元素
  • remove():从迭代器指向的collection中移除迭代器返回最后一个元素

使用Iterator遍历ArrayList

Map m = new HashMap();
m.put(1, "k");
m.put("k", 1);
m.put("k", 2); //如果键重复了 则会它的值会覆盖前面的
Collection l = m.keySet(); //返回来是一个Set 它也是一个Collection 所以可以使用迭代器
Iterator it = l.iterator();
while (it.hasNext()) {
	System.out.println(it.next());
}Code language: JavaScript (javascript)
Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注