java工具类 ~ 集合(List、Set、Map)

**集合**   --- 可以存储 任意数量 的 具有共同属性的容器

为什么使用集合,而不用数组??--- 因为数组只能是固定长度,集合可以存储任意数量

集合的应用场景:

  • 无法预测存储数量的数据
  • 需要存储有 一对一关系的数据
  • 需要频繁对数据进行删增
  • 数据重复问题

java工具类 ~ 集合(List、Set、Map)

Collection接口,属于java.util 需要导入。(之前包装类、异常类属于java.lang 不需要导入)

 

**List集合(列表)**   --- 元素有序 & 可以重复的集合

java工具类 ~ 集合(List、Set、Map)

ArrayList:长度动态变化的数组(ArrayList底层是由数组实现的)

【注意】:因为list列表在内存中是开辟了一个连续的内存空间,所以在尾部 插入、删除效率很高,所以更适合查找更新元素,并且其中元素是可以为null值。

 1、集合中添加 字符串

public class ListDemo1 {

	// 用ArrayList存储编程语言的名称,并输出
	public static void main(String[] args) {
		List list=new ArrayList();
		list.add("Java");
		list.add("C");
		list.add("C++");
		list.add("Go");
		list.add("swift");

		//输出列表中元素的个数
		System.out.println("列表中元素的个数为:"+list.size());
		
		//遍历输出所有编程语言
		System.out.println("**************************************");
		for(int i=0;i<list.size();i++){
			System.out.print(list.get(i)+",");
		}
		System.out.println();
		
		//移除列表中的C++:
		//方法1:list.remove(2);
		list.remove("C++");//方法2,参数为字符串对象,
		// 这里list集合中均为字符串(java自带的数据类型),所以这里能够直接用字符串
		System.out.println("**************************************");
		System.out.println("移除C++以后的列表元素为:");
		for(int i=0;i<list.size();i++){
			System.out.print(list.get(i)+",");
		}
	}
}

2、集合中添加 自定义类对象

(1)首先,封装一个类,类中设置私有属性、构造方法、get/set方法;

(2)其次,在集合测试类中,创建类对象,将该对象add进集合,从而进行相应的操作

 

**Set集**   --- 元素无序 & 不可重复 的集合

HashSet(哈希集),Set的一个重要实现类

  • HashSet中,元素无序 & 不可重复
  • HashSet中,只允许有一个null元素
  • 具有良好的 存取 & 查找 性能(提高查询效率,因为HashSet底层是hashMap实现的)

1、集合中添加 字符串

java工具类 ~ 集合(List、Set、Map)

public class WordDemo {
	// 将英文单词添加到HashSet中
	public static void main(String[] args) {
		Set set = new HashSet();
		// 向集合中添加元素
		set.add("blue");
		set.add("red");
		set.add("black");
		set.add("yellow");
		set.add("white");
		// 显示集合的内容
		System.out.println("集合中的元素为:");

		// 遍历迭代器并输出元素,因为:set中没有get(index)方法获取元素
		Iterator it = set.iterator();//将set集中的数据放置到迭代器中 (包:java.util.Iterator;)
		while (it.hasNext()) {
			System.out.print(it.next() + "   ");
		}
		System.out.println();

		// 在集合中插入一个新的单词
		// set.add("green");
		set.add("white");
		it = set.iterator();
		// 遍历迭代器并输出元素
		System.out.println("**************************");
		System.out.println("插入重复元素后的输出结果为:");
		while (it.hasNext()) {
			System.out.print(it.next() + "   ");
		}
		//插入重复元素时,插入失败(集合中数据不会变),但是不会报错
	}
}

2、集合中添加 自定义类对象

(1)首先,封装一个类,类中设置私有属性、构造方法、get/set方法;

(2)其次,在集合测试类中,创建类对象,将该对象add进集合,从而进行相应的操作

 

**Map**   --- 以键值对(key-value)形式存储(无序

key-value以Entry(接口)类型的对象实例存在,key值不能重复,value可以对应多个key。

HashMap:

java工具类 ~ 集合(List、Set、Map)

1、集合中添加 字符串

public class DictionaryDemo {

	public static void main(String[] args) {
		Map<String,String> animal=new HashMap<String,String>();
		System.out.println("请输入三组单词对应的注释,并存放到HashMap中");
		Scanner console=new Scanner(System.in);
		//添加数据
		int i=0;
		while(i<3){
			System.out.println("请输入key值(单词):");
			String key=console.next();
			System.out.println("请输入value值(注释):");
			String value=console.next();
			animal.put(key, value);
			i++;
		}

		System.out.println("*****************************************");

		//打印输出value的值(直接使用迭代器)
		System.out.println("使用迭代器输出所有的value:");
		Iterator<String> it=animal.values().iterator();//animal.values()方法,返回的是一个Collection类型
		while(it.hasNext()){
			System.out.print(it.next()+"    ");
		}

		System.out.println();
		System.out.println("*****************************************");

		//打印输出key和value的值
		//方法1:通过entrySet方法,将hashMap中的所以键值对都存放到一个entry类对象中
		System.out.println("通过entrySet方法得到key-value:");
		Set<Entry<String, String>> entrySet=animal.entrySet();
		for(Entry<String, String> entry:entrySet){
			System.out.print(entry.getKey()+"-");
			System.out.println(entry.getValue());
		}

		System.out.println();
		System.out.println("*****************************************");
		
		//通过单词找到注释并输出
		//使用keySet方法
		System.out.println("请输入要查找的单词:");
		String strSearch=console.next();
		//1.取得keySet
		Set<String> keySet=animal.keySet();
		//2.遍历keySet
		for(String key:keySet){
			if(strSearch.equals(key)){
				System.out.println("找到了!"+"键值对为:"+key+"-"+animal.get(key));
				break;
			}
		}
	}
}

2、集合中添加 自定义类对象