第十四章 集合类

集合类

集合类概述

  1. java.util包中提供了一些集合类,这些集合类又被成为容器。集合类长度可变,集合用来存放兑现改的引用。
  2. 常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口。

在这里插入图片描述

Collection接口

  1. 构成Collection的单位成为元素
  2. Collection接口提供了添加元素、删除元素、管理数据的方法在这里插入图片描述
  3. 遍历集合通常通过迭代器(Iterator)来实现

例:

package com.lzw;

import java.util.*;

public class Muster { // 创建类Muster
	public static void main(String args[]) {
		Collection<String> list = new ArrayList<>(); // 实例化集合类对象
		list.add("a"); // 向集合添加数据
		list.add("b");
		list.add("c");
		Iterator<String> it = list.iterator(); // 创建迭代器
		while (it.hasNext()) { // 判断是否有下一个元素
			String str = (String) it.next(); // 获取集合中元素
			System.out.println(str);
		}
	}
}

在这里插入图片描述

 注意:Iterator的next()方法返回的是Object。Iterator是一个类,iterator是Collection接口的一个方法

List集合

LIst接口

除Collection接口方法外还定义了:

  • get(int index): 获得指定索引位置的元素。
  • set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象

List接口的实现类

 List接口的常用实现类有 ArrayList与 LinkedList。
  • ArrayList类实现了可变的数组。 访问对象速度较快
  • LinkedList类采用链表结构保存对象。 插入和删除对象效率集合较高

实例化List集合:

List<E> list = new ArrayList<>();
List<E> list2 = new LinkedList<>();

其中,E是合法的Java数据类型。

例:

import java.util.*;

public class Gather { // 创建类Gather
	public static void main(String[] args) { // 主方法
		List<String> list = new ArrayList<>(); // 创建集合对象
		list.add("a"); // 向集合添加元素
		list.add("b");
		list.add("c");
		int i = (int) (Math.random() * (list.size() - 1)); // 获得0~1之间的随机数
		System.out.println("随机获取数组中的元素:" + list.get(i));
		list.remove(2); // 将指定索引位置的元素从集合中移除
		System.out.println("将索引是'2'的元素从数组移除后,数组中的元素是:");
		for (int j = 0; j < list.size(); j++) { // 循环遍历集合
			System.out.println(list.get(j));
		}
	}
}

Set集合

  1. Set的构造有一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象(Mutable Object)

     Set接口常用的实现类有HashSet类与TreeSet类。
    
  • HashSet类实现Set接口,由哈希表(实际上是一个HashMap实例) 支持。不保证Set的迭代书序,允许使用null元素
  • TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序。

(代码待补充)

Map集合

Map集合提供的是key到value的映射。Map中不能包含相同的key,每个key 只能映射一个value。

Map接口

Map接口中的常用方法

Map接口的实现类

1.Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高。

实践与练习

  1. 将1~100之间的所有正整数存放在一个List集合中,并将集合中索引位置是10的对象从集合中移除。
import java.util.*;
class Main {
	public static void main(String args[]) {
		List<Integer> list = new ArrayList<>();
		for (int i = 1; i <= 100; i++) {
			list.add(i);
		}
		// System.out.println(list);
		for (int i = 10; i <= list.size(); i = i + 10) { 
		// 注意List类的大小为size(),并非 length();
			list.remove(i);
		}
		// System.out.print(list);
	}
}

2.分别向Set集合以及List集合中添加“A”“a”“c”“C”“a”5个元素,观察重复值“a”能否重复地在List集合以及Set集合中添加。

import java.util.*;
class Main{
	public static void mian(String args[]){
		Set<Character> set1 = new HashSet<>();
		List<Character> list1 = new ArrayList<>();//字符的包装类为 Character
		set1.add('A');
		set1.add('a');
		set1.add('c');
		set1.add('C');
		set1.add('a');
		list1.add('A');
		list1.add('a');
		list1.add('c');
		list1.add('C');
		list1.add('a');
		//System.out.println(set1);
		//System.out.println(list1);
	}
}

在这里插入图片描述
set集合中不能包含重复的对象,但是用add添加同一个对象并不会报错,而是直接不加入集合中,无视这条语句。

3.创建Map集合,创建Emp对象,并将Emp对象添加到集合中(Emp对象的id作为Map集合的建),并将id为“015”的对象从集合中移除。

import java.util.*;

public class Text {
	public static void main(String[] args) {
		Map<String, String> map = new TreeMap<>();
		Emp emp = new Emp("001", "张三");
		Emp emp2 = new Emp("005", "李四");
		Emp emp3 = new Emp("004", "王一");
		Emp emp4 = new Emp("010", "王一");
		Emp emp5 = new Emp("015", "王一");
		map.put(emp.getE_id(), emp.getE_name());
		map.put(emp2.getE_id(), emp2.getE_name());
		map.put(emp3.getE_id(), emp3.getE_name());
		map.put(emp4.getE_id(), emp4.getE_name());
		map.put(emp5.getE_id(), emp5.getE_name());
		map.remove("015");//直接remove(key)
		for (String string : map.keySet()) {
			System.out.println(map.get(string));
		}
	}
}

Emp方法就不写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值