1.三种集合遍历方式
1.增强for
增强for循环可用于int[]、String、集合、自定义类型的各种遍历,其格式如下:
for(元素数据类型变量名 :数组或者Collection集合 ){
//在此处使用变量名即可。
代码如下:
//增强for:最方便的遍历方式
for(Student s:list){
System.out.println(s.getName()+" : "+s.getAge());
}
结果如下:name:age
2.迭代器
(1)Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。
(2)GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“空姐”、“火车上的乘务员”。
(3)Collection 接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
(4)Iterator仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。
(5)集合对象每次调用iterator()方法都能得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
//迭代器遍历:集合特有的遍历方式
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student s = it.next();
System.out.println(s.getName()+" : "+s.getAge());
}
hasNext() 是否还有下一个元素:通过cursor字段,判断是否到达集合边界
next() 先让游标后移一位,再返回索引元素
remove() 删除元素
3.lambda表达式
list.forEach(item->{
//执行逻辑
//item.setName(“测试”);
//item.getName();
});
2.数据结构
HashMap:
特点: 基于哈希表实现的键值对存储结构。
优点: 高效的查找、插入和删除操作。
缺点: 无序,不保证顺序。
TreeMap:
特点: 基于红黑树实现的有序键值对存储结构。
优点: 有序,支持按照键的顺序遍历。
缺点: 插入和删除相对较慢。
栈(Stack)
栈(Stack)遵循先进后出(FILO)原则。
Stack<Integer> stack = new Stack<>();
Stack 类:
特点: 代表一个栈,通常按照后进先出(LIFO)的顺序操作元素。
队列(Queue)
队列(Queue)遵循先进先出(FIFO)原则,常见的实现有 LinkedList 和 PriorityQueue。
Queue<String> queue = new LinkedList<>();
Queue 接口:
特点: 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素。
实现类: LinkedList, PriorityQueue, ArrayDeque。
堆(Heap)
堆(Heap)优先队列的基础,可以实现最大堆和最小堆。
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
树(Trees)
Java 提供了 TreeNode 类型,可以用于构建二叉树等数据结构。
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
3.Hashset和LinkedHashset
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 实现了 Set 接口。
注意:1Hashset底层由数组+链表+红黑树组成
2.当链表长度大于8,当数组长度大于64,自动转化为红黑树
3.如果集合储存自定义对象,必须重写hashcode和equals方法
LinkedHashset底层原理:
1.有序,不重复,无索引
2.有序指保证储存与取出元素顺序相同
3.底层数据结构为哈希表,每个元素多了一个双链表的机制记录储存顺序
4.Treeset,以及遍历方式
TreeSet 是一个有序集合,它的作用是提供有序的Set集合。其继承于 AbstractSet 类TreeSet 实现了 NavigableSet 接口,意味着它支持一系列的导航方法。比如查找指定目标最匹配项。
TreeSet 是通过 TreeMap 实现的一个有序的、不可重复的集合,底层维护的是红黑树结构。当TreeSet的泛型对象不是java的基本类型的包装类时,对象需要实现接口Comparable并重写此接口中的compareTo()方法。 TreeSet 实现了 Serializable 接口,所以它支持序列化。
2. 构造方法——API文档