CoreJava学习笔记06 集合(List Set Map)

本文深入讲解了集合容器的概念,包括其对数组的封装优势、集合的特性及其实现类如List、Set、Map的详细说明。探讨了各种集合类型的使用场景、内部结构以及常见操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合 容器

用来存储对象的对象

数组的弱点: 增删麻烦 扩容麻烦

集合: 对数组的封装, 把常用的数组操作预先实现好

Collection

特点: 元素是对象
常用方法:
方法作用
add(Object o)将元素o放入集合
addAll (Collection c)将集合c中所有元素放入集合
clear()清空集合
contains(Object o)判断集合中是否存在元素o
remove(Object o)删除元素o
size()获得集合长度 集合中元素的个数
toArray()将集合转为Object[]
遍历
  1. 迭代
		Iterator it = list.iterator();
		while(it.hasNext()) {
			Object o = it.next();
			String s = (String)o;
			System.out.println(s.toUpperCase());
		}
  1. for-each
		for(Object o : list) {
			String s = (String)o;
			System.out.println(s.toUpperCase());
		}
  1. forEach()
		list.forEach(new Consumer<String>() {
			public void accept(String s) {
				System.out.println(s);
			}
		});
		
		list.forEach(s->System.out.println(s));
		
		list.forEach(System.out::println);

List Collection的子接口

特点: 元素按照下标顺序存储, 可以重复
常用方法:
方法作用
add(int pos , Object o)将对象o插入到pos下标
get(int pos)获得pos下标的元素
indexOf(Object o)获得对象o在集合中的首次出现的下标 -1表示元素不存在
remove(int pos)删除pos下标的元素
遍历
  1. 下标遍历
		for(int i = 0 ; i < list.size() ; i++) {
			Object o = list.get(i);
			String s = (String)o;
			System.out.println(s.toUpperCase());
		}
  1. 迭代遍历
  2. for-each
实现类
  1. ArrayList 用数组实现 查询快 增删慢 1.2 线程不安全 快
  2. LinkedList 用链表实现 增删快 查询慢
  3. Vector 用数组实现 1.0 线程安全 慢

Set Collection的子接口

特点: 元素没有顺序,不按照下标存储, 元素内容不可重复

Set Collection的子接口

特点: 元素没有顺序,不按照下标存储, 元素内容不可重复
常用方法: 无
遍历: 同Collection
实现类:
  1. HashSet 底层存储结构: 链表数组

    保证元素内容不重复:

    1. 覆盖对象的hashCode()方法, 保证相同的对象返回相同的整数

    2. 覆盖对象的equals()方法, 保证相同的对象equals返回true

    3. 为了提高效率, 尽量实现不同的对象,哈希码不同

    散列表 (分散排列) 查询效率和增删效率都高, 缺点: 空间大

  2. LinkedHashSet HashSet的子类 遍历时按照元素添加的顺序遍历

  3. (一般了解) TreeSet SortedSet(Set的子接口) 的实现类 自动对元素进行从小到大的排序

Map

特点: 元素是键值对 键对象 — 值对象
key: 无顺序(无下标) 内容不可重复 value:可以重复
常用方法
方法作用
get(Object key)通过key,查找对应的值(value)
put(Object key , Object value)把key-value 添加到Map中 , 如果key已存在, 新的value替换旧的value
remove(Object key)删除key所对应的键值对
containsKey(Object key)判断Map中是否存在key
containsValue(Object value)判断Map中是否存在value
size()获得Map中键值对的数量
遍历
  1. keySet() 返回Map中所有的key的集合 Set

    		Set<Integer> keys = map.keySet();
    		for(Integer k : keys) {
    			String v = map.get(k);
    			System.out.println(k+" --- "+v);
    		}
    
  2. values() 返回Map中所有的value的集合 Collection

    		Collection<String> vs = map.values();
    		for(String v : vs) {
    			System.out.println(v);
    		}
    
  3. forEach()

    	map.forEach((k,v)->System.out.println(k+"---"+v));
    
实现类
1. HashMap  利用Hash算法保证key的内容不重复    1.2 线程不安全    允许用null作为key或value
2. LinkedHashMap  HashMap的子类, 遍历时按照元素添加的顺序遍历
3. (一般了解 )  TreeMap   SortedMap(Map的子接口) 的实现类   自动对key进行从小到大的排序
4. Hashtable  1.0 线程安全  不允许用null作为key或value
5. (一般了解 ) Properties  Hashtable的子类  key和value都是String  通常用于配置文件的读取和处理

泛型

在类或方法中,可以将类型作为变量, 而避免硬编码

在集合中, 泛型用来约定集合中元素的类型, 从而实现类型安全的集合

List list = new ArrayList(); 等号左右的泛型,必须一致,不能使用多态

		List<String> list = new ArrayList<String>();  // list中只能存放String对象 
		list.add("Liucy");
		list.add("Huxz");
		list.add("Wudh");
		list.add("Qiqy");
		list.add(10); // error list中只能添加String对象
		
		for(int i = 0 ; i < list.size() ; i++) {
			String s = list.get(i); // 不需要强制类型转换
			System.out.println(s);
		}

集合总汇

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值