JAVA集合Collection和Map的用法和详解

集合的体系结构

集合的分类

  • 单列集合:每个元素都是一个单独的个体。
  • 双列集合:每个元素都是一对数据,把这一对数据当做一个整体去操作。

单列集合的体系

Collection:Lise 、Set
List :
有序的单列集合接口,存入的数据可以重复且有序。
Set:
无序的单列接口,存入数据不可重复。

双列集合的体系

Map: HashMap、LinkedHashMap

Collection

顶层接口,子接口有List,Set。

用法及添加数据
package com.bingjiu.conllection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;

public class Conllection {
	public static void main(String[] args) {
		//Collection用法1
		Collection conArr= new ArrayList();
		//添加数据
		conArr.add("添加数据");
		conArr.add("生活方式");
		//Collection用法2
		Collection conLink = new LinkedList();
		//添加数据
		conLink.add(1);
		conLink.add("跟客户说v");	
	}
}

Collection的二种遍历方法
package com.bingjiu.conllection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Conllection {
	public static void main(String[] args) {
		// Collection用法1
		Collection conArr = new ArrayList();
		// 添加数据
		conArr.add("你好");
		conArr.add("大漂亮");
		conArr.add("大帅比");
		conArr.add("年后");
		conArr.add("就要你好看");
		conArr.add("案说法工行卡就");
		
		/*
		 * 第一种遍历的集合
		 */
		// 讲集合种的元素转位Object类型的数组
		Object[] obj = conArr.toArray();
		//进行遍历
		for (int i = 0; i < obj.length; i++) {
			System.out.println(obj[i]);
		}
		
		/*
		 * 第二种遍历集合
		 */
		//获取迭代器对象,调用集合的iterator的方法
		Iterator it = conArr.iterator();
		//先判断当前位置是否有元素
		while(it.hasNext()) {
			Object ob=it.next();
			System.out.println(ob);
		}
	}
}

Collection常用方法
方法 说明
add(Object c) 将c元素添加到集合中
remove(Object c) 将c从集合中删除
clear() 清空集合中的元素
size() 获取集合中元素个数
isEmpty() 判断是否为空
addAll(Collection c) 将集合c中的所有元素添加到调用者集合中
containsAll(Collection c) 判断调用者集合中包含c中的所有元素
removeAll(Collection c) 删除调用者集合中所有c中的元素
retainAll(Collection c) 参数c中有哪些元素,就在调用者集合中,保留哪些元素
Collections工具类
方法 说明
sort(List list) 对list集合进行自然升序排序
binarySearch(List lit, T key) 二分查找法,返回元素的位置,查找的集合必须有序
frequency(Collection c, Object o) 获取集合中等于o元素的个数
reverse(List list) 反转集合中的元素
shuffle(List list) 随机打乱集合中的元素的顺序
swap(List list,int i ,int j) 交换集合中i和j的位置的元素
replaceAll(List list ,T oldVaa,T newVal) 可以将集合中旧的值转为新的值

代码:

package com.ujiuye.demo;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class Demo10 {
	public static void main(String[] args) {
	List<Integer> l = new ArrayList<>();
	l.add(5);
	l.add(10);
	l.add(10);
	l.add(10);
	l.add(6);
	l.add(3);
	l.add(1);
	System.out.println(l);
	//排序
	Collections.sort(l);
	System.out.println(l);
	//二分查找法
	int i = Collections.binarySearch(l, 5);
	System.out.println(i);
	//查找集合中的最大值最小值
	System.out.println(Collections.max(l));
	System.out.println(Collections.min(l));
	//判断该集合中含有该元素的个数
	int j = Collections.frequency(l, 10);
	System.out.println(j);
	//反转集合
	Collections.reverse(l);
	System.out.println(l);
//        //随机打乱顺序
//        Collections.shuffle(l);
//        System.out.println(l);
	//元素交换
	Collections.swap(l, 3, 4);
	System.out.println(l);
	//返回一个不可修改的集合
//        List list = Collections.unmodifiableList(l);
//        System.out.println(list);
//        list.add(1);
	Collections.replaceAll(l, 10, 8);//新旧交换
	System.out.println(l);
	}
}

Lise

有序的单列集合接口,存入的数据可以重复且有序。

Lise实现类
实现类 说明 用法
ArrayList 数组结构存储数据,查询速度快,增删改慢 List list = new ArrayList()
LinkList 链表结构存储数据,增删速度快,查询稍慢; List list = new LinkList();
Vector 数据结构存储数据

List三个实现类区别:可转向zxx901221的博客文章

Lise方法
方法 说明
add(int index , Object obj) 向指向位置index插入一个元素obj
remove(int index) 根据位置删除一个元素
set(int index,Object obj) 将指定位置的元素替换为obj
get(int index) 获取指定位置index的元素
Lise遍历方法
package com.bingjiu.conllection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ConllectionList {
	public static void main(String[] args) {
		// 集合对象
		List list2=new LinkedList();
		List list = new ArrayList();
		// 添加数据
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);

		//遍历方法 1
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		//遍历方法2
		Iterator iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
		//遍历方法3
		Object[] obj=list.toArray();
		for(int i=0; i<obj.length;i++) {
			System.out.println(obj[i]);
		}
		
	}
}

Set

无序的单列接口,存入数据不可重复,没有索引。

Set实现类
实现类 说明
Hashset 底层数据结构是哈希表,存储的数据无序
LinkedHashSet 通过哈希表加上链表的形式存储数据,hash存储元素,链表维护元素的存入的先后顺序
Set遍历方法
package com.bingjiu.conllection;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;

public class ConllectionSet {
	public static void main(String[] args) {
		//set的实现类用法
		Set<String> s=new LinkedHashSet<String>();
		Set<Integer> set = new HashSet<Integer>();
		set.add(1);
		set.add(2);
		set.add(3);
		set.add(4);

		// 遍历set集合,1
		for (Integer i : set) {
			System.out.println(i);
		}

		// 遍历set集合,2
		Iterator<Integer> iterator = set.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());

		}

		// 遍历set集合,3
		Object[] obj = set.toArray();
		for (int i = 0; i < obj.length; i++) {
			System.out.println(obj[i]);
		}
		
	}
}

Map

Map数据结构,描述一个数据(Key)到另一个数据(value)的映射关系。
key(键)的值是唯一的,value(值)不是唯一的。

Map实现类

实现类 说明
HashMap 最常用的Map,存储没有顺序
LinkedHashMap 保存了记录的插入顺序

Map常用方法

方法 说明
put(K key,V value) 如果Key不存在,就是添加。如果key存在,就是修改Key值对应的value
remove(Object key) 删除键值对的方法,如果有key存在,就能删除,并把value值返回
clear() 清空
containsKey(Object key) 判断是否包含某个键
containsValue(Object value) 判断是否包含某个值
size() 获取元素个数
get(Object key) 根据key值返回value值,找不到返回null
isEmpty 判断集合是否为空(无元素)

Map遍历方法

package com.bingjiu.conllection;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapKeyValue {
	public static void main(String[] args) {
		Map<Integer, String> map = new HashMap<Integer, String>();
		map.put(001, "张飞");
		map.put(002, "关羽");
		map.put(003, "曹操");
		map.put(004, "孙权");

		// 遍历集合,1
		Set<Integer> s = map.keySet();// 获取所有的Key值
		for (Integer k : s) {
			System.out.println(map.get(k));
		}

		// 遍历集合,2
		Set<Entry<Integer, String>> entrySet = map.entrySet();
		for (Entry<Integer, String> e : entrySet) {
			int key = e.getKey(); // 获取当前键值
			String valuer = e.getValue(); // 获取当前值 值
			System.out.println(key + "-->" + valuer);

		}
	}
}

Map和Collection的区别

相同点

都是存储数据的。

不同点

1.Map是双列集合,Collection是单列集合;
2.Map下的键是唯一的, Collection下list是有序不唯一,set是无序唯一;
3.Map操作的方法基本都和Key有关,list和下标有关,set和元素有关。

你可能感兴趣的:(JAVA,java,集合,set,map)