欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常用的Map遍历方式

程序员文章站 2024-02-14 22:59:22
...
public class mapdemo1 {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("尹志平", "小龙女");
		map.put("令狐冲", "东方不败");
		map.put("李斌", "王凤鸣");
		method2(map);
	}
	private static void method2(Map<String, String> map) {
		//第二种 Set<Map.Entry<String, String>> entrys = map.entrySet()
		//Set集合放的是Map的Entry对象,Entry里面放的是map对象
		//通过结婚证对象获取key(丈夫)和value(媳妇)
		/**
		 * class Entry<K, V>{
		 * 		K key;
		 * 		V value;
		 * 
		 * 		public Entry(K key, V value){
		 * 			this.key = key;
		 * 			this.value = value;
		 * 		}
		 * 		public K getKey(){
		 * 			return key;
		 * 		}
		 * 		public K getValue(){
		 * 			return value;
		 * 		}
		 * }
		 */
		//Entry是Map的内部类
		System.out.println("通过Map.entrySet使用Set遍历key和value");
		Set<Map.Entry<String, String>> entrys = map.entrySet();
		for (Map.Entry<String, String> entry : entrys) {
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println("key:"+ key + "value:" + value);
		}
		System.out.println("通过Map.entrySet使用iterator遍历key和value");
		Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
		while(iterator.hasNext()) {
			Map.Entry<String, String> entry = iterator.next();
			System.out.println("key = " + entry.getKey() + " " + "value = " + entry.getValue());
		}
	}

	private static void method1(Map<String, String> map) {
		//第一种
		System.out.println("通过Map.keySet遍历key和value--繁琐");
		//1. 繁琐的方法
		Set<String> KeySet = map.keySet();
		for (String value : KeySet) {
			System.out.println("key = " + value + " " + "value = " + map.get(value));
		}
		//2. 简单方法
		System.out.println("通过Map.keySet遍历key和value--简单");
		for(String keyString : map.keySet()) {
			System.out.println("key = " + keyString + " " + "value = " + map.get(keyString));
		}
	}

}

map和collection区别


/**
 * Map是另外一种顶层接口,和Collection接口没有任何关系
 * 
 * Map和Collecion有什么区别?
 * 			Map:是一个双列集合 key不可以重复
 * 			Collection:是单列集合,有不同的子体系,有的允许重复有索引有序(List),有的不允许重复且无序(Set)
 * @author chenxin
 *
 *	Map的常用功能:
 *			判断:boolean containsKey(Object key)
 *				boolean containsValue(Object value)
 *				boolean isEmpty()
 *				
 *
 *			删除:void clear()
 *				V remove(Object key):根据key删除对应关系,并且返回被删除key对应的value
 *
 *			遍历功能:Set<Map.Entry<K,V>> entrySet()
 *
 *			获取功能:V get(Object key)
 *					Set<K> keySet()
 *					Collection<V> values()
 *					int size()
 *			
 *			添加(映射)功能:V put(K key, V value)
 */
public class mapdemo2 {
	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		
//		//V put(K key, V value):将key映射到value功能,如果key存在,就覆盖value,并将原来的value返回
//		System.out.println(map.put("001", "zhangsan"));
//		System.out.println(map.put("002", "lisi"));
//		System.out.println(map.put("001", "wangwu"));
//		System.out.println(map);
//		
//		//boolean containsKey(Object key):判断指定的key是否存在
//		//boolean containsValue(Object value):判断指定的value是否存在
//		//boolean isEmpty()
		map.put("001", "zhangsan");
		map.put("002", "lisi");
		map.put("003", "wangwu");
		
		//Collection<V> values():查每个key对应的value值
		Collection<String> collection = map.values();
		for (String valueString : collection) {
			System.out.println(valueString);
		}
	}

	private static void method(Map<String, String> map) {
		//Set<K> keySet():因为map的key是不重复的,所以有了可以实现的keySet方法
		//遍历set有三种方法:转数组;迭代器,增强for
		Set<String> keys = map.keySet();
		for (String key : keys) {
			System.out.println(key);
		}
	}
}

Iterator遍历

/**
 * 集合遍历方式:
 * 			1. toArray(),可以把集合转换成数组,然后遍历数组即可
 * 			2. iterator(),可以返回一个迭代器对象,我们通过迭代器(遍历器)对象来迭代集合
 * Iterator:对Collection 进行迭代的迭代器。可以用于遍历集合
 * E next(): 返回下一个元素
 * boolean hasNext():
 * 
 * Exception in thread "main" java.util.NoSuchElementException
 * @author chenxin
 *
 */
public class IteratorDemo {
	public static void main(String[] args) {
		//method();
		//创建集合对象
		Collection collection = new ArrayList<>();
		//添加集合元素
		collection.add("hello");
		collection.add("world");
		collection.add("java");
		
		Iterator iterator = collection.iterator();
        //用hasNext() 判断是否有值,返回true或者false,用next()方法把元素取出。
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}

	private static void method() {
		//创建集合对象
		Collection collection = new ArrayList<>();
		//添加集合元素
		collection.add("hello");
		collection.add("world");
		collection.add("java");
		//获取数组
		Object[] objs = collection.toArray();
		
		//遍历数组
		for (int i = 0; i < objs.length; i++) {
			System.out.println(objs[i]);
		}
	}
}

Collections和Collection区别

public class collectionsDemo {
	/**
	 * 	static int binarySearch(List list, Object key):二分查找指定元素key在指定列表的索引位置
		前提有序 如12345
		List集合不加泛型的话只能放对象,不能放基本数据类型:4类8种(整浮字符布尔)
		所以List<int> list = new ArrayList<int>();写法错误,String是属于类类型的,引用数据类型三种:类/接口/数据类型
	 */
	
	public static void main(String[] args) {
		//static void swap(List list, int a, int b):列表交换某两个索引位置,不是元素
		List<Integer> lists = new ArrayList<Integer>();
		lists.add(1);
		lists.add(3);
		Collections.swap(lists, 0, 1);
		System.out.println(lists);
	}

	private static void method6() {
		//static void sort(List list):排序,默认从小到大
		List<Integer> lists = new ArrayList<Integer>();
		lists.add(1);
		lists.add(3);
		lists.add(2);
		lists.add(4);
		Collections.sort(lists);
		System.out.println(lists);
	}

	private static void method5() {
		//static void shuffle(List list):随机置换
		List<String> list = new ArrayList<String>();
		list.add("hello");
		list.add("world");
		list.add("java");
		
		Collections.shuffle(list);
		System.out.println(list);
	}

	private static void method4() {
		//static void reverse(List list):反转
		List<String> list = new ArrayList<String>();
		list.add("hello");
		list.add("world");
		list.add("java");
		
		Collections.reverse(list);
		System.out.println(list);
	}

	private static void method3() {
		//static void fill(List list, Object obj):使用指定对象填充指定列表的所有元素
		List<String> list = new ArrayList<String>();
		list.add("hello");
		list.add("world");
		list.add("java");
		System.out.println(list);
		Collections.fill(list, "android");
		System.out.println(list);
	}

	private static void method2() {
		//static void copy(List destination, List source):原列表的数据覆盖到目标列表
		//源列表
		List<String> source = new ArrayList<>();
		source.add("hello");
		source.add("world");
		source.add("java");
		
		//创建目标列表,目标列表长度至少等于源列表的长度
		List<String> destination = new ArrayList<>();
		destination.add("");
		destination.add("");
		destination.add("");
		destination.add("");
		Collections.copy(destination, source);
		System.out.println(destination);
	}

	private static void method() {
		List<Integer> lists = new ArrayList<Integer>();
		lists.add(1);
		lists.add(2);
		lists.add(3);
		lists.add(4);
		
		int index = Collections.binarySearch(lists, 4);
		System.out.println(index);
	}
}