容器(二)
六.迭代器
使用Iterator迭代器遍历容器元素(List/Set/Map)
迭代器为我们提供了统一的遍历容器的方式
迭代器遍历List
public static void testIteartorList() {
List<String> list=new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
Iterator<String> iter=list.iterator();
while(iter.hasNext()) {
//看作指针移动
String temp=iter.next();
System.out.println(temp);
}
}
迭代器遍历Set
public static void testIteartorSet() {
Set<String> set=new HashSet<>();
set.add("aa");
set.add("bb");
set.add("cc");
Iterator<String> iter=set.iterator();
while(iter.hasNext()) {
//看作指针移动
String temp=iter.next();
System.out.println(temp);
}
}
迭代器遍历Map(一)
1.Map中键值都存放的结点中 ,先通过map.entrySet();获得set(ss)结点
2.再遍历set
public static void testIteartorMap() {
Map<Integer,String> map=new HashMap<>();
map.put(100,"aa");
map.put(200,"bb");
map.put(300,"cc");
//获得结点
Set<Entry<Integer,String>> ss=map.entrySet(); //import java.util.Map.Entry;
Iterator<Entry<Integer, String>> iter=ss.iterator();
while(iter.hasNext()) {
Entry<Integer, String> temp=iter.next();//得到的是结点
System.out.println(temp.getKey()+"```"+temp.getValue());
}
}
迭代器遍历Map(二)
public static void testIteartorMap() {
Map<Integer,String> map=new HashMap<>();
map.put(100,"aa");
map.put(200,"bb");
map.put(300,"cc");
//获得键的集合
Set<Integer>keySet=map.keySet(); //import java.util.Map.Entry;
Iterator<Integer> iter=keySet.iterator();
while(iter.hasNext()) {
Integer key=iter.next();
System.out.println(key+"```"+map.get(key));
}
}
遍历集合的方法总结
1.遍历List
方法一:
普通for循环
for(int i=0;i<list.size();i++){
//list为集合的对象名
String temp = (String)list.get(i);
System.out.println(temp);
}
方法二:
增强for循环(使用泛型!)
for (String temp : list) {
System.out.println(temp);
}
方法三:
使用Iterator迭代器(1)
Iterator<String> iter=list.iterator();
while(iter.hasNext()) {
//看作指针移动
String temp=iter.next();
System.out.println(temp);
}
/同理
for(Iterator iter= list.iterator();iter.hasNext();){
String temp = (String)iter.next();
System.out.println(temp);
}
方法四:
使用Iterator迭代器(2)
Iterator iter =list.iterator();
while(iter.hasNext()){
Object obj = iter.next();
iter.remove();//如果要遍历时,删除集合中的元素,建议使用这种方式!
System.out.println(obj);
}
2.遍历Set
方法一:
增强for循环
for(String temp:set){
System.out.println(temp);
}
方法二:
使用Iterator迭代器
Iterator<String> iter=set.iterator();
while(iter.hasNext()) {
//看作指针移动
String temp=iter.next();
System.out.println(temp);
}
/同理
for(Iterator iter = set.iterator();iter.hasNext();){
String temp = (String)iter.next();
System.out.println(temp);
}
3.遍历Map
方法一:
根据key获取value
Map<Integer, Man> maps = new HashMap<Integer, Man>();
//获得键的集合
Set<Integer>keySet=map.keySet(); //import java.util.Map.Entry;
for(Integer id : keySet){
System.out.println(maps.get(id).name);
}
/
Iterator<Integer> iter=keySet.iterator();
while(iter.hasNext()) {
Integer key=iter.next();
System.out.println(key+"```"+map.get(key));
}
}
方法二:
使用entrySet
//获得结点
//import java.util.Map.Entry;
Set<Entry<Integer,String>> ss=map.entrySet();
//指结点的迭代器
Iterator<Entry<Integer, String>> iter=ss.iterator();
while(iter.hasNext()) {
Entry<Integer, String> temp=iter.next();//得到的是结点
System.out.println(temp.getKey()+"```"+temp.getValue());
}
Set<Entry<Integer, Man>> ss = maps.entrySet();
for (Iterator iterator = ss.iterator(); iterator.hasNext();) {
Entry e = (Entry) iterator.next();
System.out.println(e.getKey()+"--"+e.getValue());
}
七.Collections工具类
类 java.util.Collections 提供了对Set、List、Map进行排序、填充、查找元素的辅助方法。
是辅助类,不是Collection接口
Collections工具类的常用方法
项目 | Value |
---|---|
void sort(List) | 对List容器内的元素排序,排序的规则是按照升序进行排序 |
void shuffle(List) | 对List容器内的元素进行随机排列 |
void reverse(List) | 对List容器内的元素进行逆续排列 |
void fill(List, Object) | 用一个特定的对象重写整个List容器 |
int binarySearch(List, Object) | 对于顺序的List容器,采用折半查找的方法查找特定对象。 |
示例
public class TestCollections {
public static void main(String[] args) {
List<String> list=new ArrayList<>();
for(int i=0;i<10;i++) {
list.add("dj"+i);
}
System.out.println(list);
//随机排列List中的元素
Collections.shuffle(list);
System.out.println(list);
//逆序排列List
Collections.reverse(list);
System.out.println(list);
//按照递增顺序排列,自定义的的类用Comparable接口。
Collections.sort(list);
System.out.println(list);
//二分法查找(折半查找),返回索引值
System.out.println(Collections.binarySearch(list, "dj9"));
}
}
总结
1.Collection 表示一组对象,它是集中、收集的意思,就是把一些数据收集起来。
2.Collection接口的两个子接口:
1) List中的元素有顺序,可重复。常用的实现类有ArrayList、LinkedList和 vector。
Ø ArrayList特点:查询效率高,增删效率低,线程不安全。
Ø LinkedList特点:查询效率低,增删效率高,线程不安全。
Ø vector特点:线程安全,效率低,其它特征类似于ArrayList。
2) Set中的元素没有顺序,不可重复。常用的实现类有HashSet和TreeSet。
Ø HashSet特点:采用哈希算法实现,查询效率和增删效率都比较高。
Ø TreeSet特点:内部需要对存储的元素进行排序。因此,我们对应的类需要实现Comparable接口。这样,才能根据compareTo()方法比较对象之间的大小,才能进行内部排序。
3. 实现Map接口的类用来存储键(key)-值(value) 对。Map 接口的实现类有HashMap和TreeMap等。Map类中存储的键-值对通过键来标识,所以键值不能重复。
4. Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
5. 类 java.util.Collections 提供了对Set、List、Map操作的工具方法。
6. 如下情况,可能需要我们重写equals/hashCode方法:
1) 要将我们自定义的对象放入HashSet中处理。
2) 要将我们自定义的对象作为HashMap的key处理。
3) 放入Collection容器中的自定义对象后,可能会调用remove、contains等方法时。
7.JDK1.5以后增加了泛型。泛型的好处:
1) 向集合添加数据时保证数据安全。
2) 遍历集合元素时不需要强制转换。