java集合Collection(List)和泛型

简介: java集合Collection(List)和泛型
java集合Collection(List)和泛型

  • 集合大小不固定,可以动态变化,类型也可以选择不固定
  • 集合只能存储引用类型的数据
集合类体系结构
  • Collection -> 接口元素是有序的,有索引
  • List -> 接口
  • ArrayList
  • LinkedList
  • Set -> 接口无序,不重复,无索引
  • HashSet --> LinkedHashSet
    HashSet 无序, LinkedHashSet 有序
  • TreeSet
    按照大小默认升序排序
  • Map
    键值对
泛型

集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

Collection<String> lists = new ArrayList<String>();
Collection<String> lists = new ArrayList<>();
// 泛型类型声明可以省略

集合和泛型只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象

存储基本数据类型: 使用包装类

Collection<Integer> lists = new ArrayList<>();
// Double
Collection集合常用API

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

集合遍历
  • 迭代器遍历
    Iterator, 迭代器是集合专用的遍历方式

.next() 取出当前位置的元素,并指向下一个

Iterator<String> it = lists.iterator();
while(it.hasNext()){
  String element = it.next();
    System.out.println(element);
}
  • foreach遍历
for(元素数据类型 变量名 : 数组或者Collection集合){
    // ...
}
  • 可以遍历集合也可以遍历数组
  • lambda 表达式遍历
    JDK 8 开始有lambda表达式

Collection<String>lists = new ArrayList<>();
lists.forEach(new Consumer<String>(){
   @Override
    public void accept(String s){
        System.out.println(s);
    }
    
});
lists.forEach(s->{ // 只有一条语句可以省略{}
    System.out.println(s);
});

集合中存储的是元素对象的地址

常见数据结构
  • 平衡二叉树
    在满足查找二叉树大大小规则下,让树尽可能矮小,提高查数据的性能
    任意节点的左右两个子树的高度差不超过1
  • 红黑树自平衡的二叉查找树
  • 每一个节点或是红色的,或是黑色的,根节点必须是黑色的
  • 如果一个节点是红色的,那么它的子节点必须是黑色的( 不能出现两个红色节点相连的情况 )
  • 对于每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
List 系列集合
  • ArrayList, LinkedList : 有序,可重复,有索引
  • List 集合特有方法

  • ArrayList 底层是基于数组实现的,查询元素快,增删相对较慢
    第一次创建集合并添加第一个元素时,在底层创建一个默认长度为10的数组
List<String> list = new ArrayList();
  • LinkedList 底层是基于双链表实现的,查询元素慢,增删首尾元素很快
    首尾操作特有API

泛型
  • 格式: < 数据类型> 可以在编译阶段约束操作的数据类型
  • 泛型只能支持引用数据类型
  • 集合体系的全部接口和实现类都是支持泛型的使用
  • 在编译阶段类型就能确定下来
泛型的定义
  • 类后面–> 泛型类
  • 定义类的同时定义了泛型的类就是泛型类
  • 修饰符 class 类名 < 泛型变量> {}
public class MyClass<T> {}
  • 泛型变量T可以随便写为任意标识,常见: E T K V等
  • 编译阶段可以指定数据类型
  • 方法声明上 --> 泛型方法
  • 自定义方法的同时定义了泛型的方法就是泛型方法
  • 修饰符 < 泛型变量> 方法返回类型 方法名称(形参列表){}
public <T> void show(T t){}
  • 接口后面 --> 泛型接口
  • 修饰符 interface 接口名称 < 泛型变量> {}
public interface Data<E> {}
  • 泛型接口可以让实现类选择当前功能需要操作的数据类型
    实现类可以在实现接口的时候传入自己操作的数据类型,重写的方法都将是针对该类型的操作
泛型通配符
  • ? 可以在使用泛型时代表一切类型
  • E T K V是在定义泛型时使用的
泛型上下限
  • ? extends Car --> ? 必须是Car 或者其子类, 泛型上限
  • ? super Car --> ? 必须是Car 或者其父类, 泛型下限
相关文章
|
4天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
23 3
|
21天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
37 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
43 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
37 2
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
8月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
5月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
5月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
3月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
69 5
|
8月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
106 0