Java容器collection学习(二)

六.迭代器

使用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) 遍历集合元素时不需要强制转换。

猜你喜欢

转载自blog.csdn.net/weixin_43792004/article/details/100011800
今日推荐