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():获取下一个元素,如果有则返回truenext():返回迭代的下一个元素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)