三种集合遍历方式,数据结构,Hashset和LinkedHashset

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

​编辑 Java 集合框架

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文档

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值