小码笔记14:Collection集合、数据结构

一、Iterator迭代器

Java.util.Iterator接口
Iterator对象也被称为迭代器

1.迭代器

  • 迭代:集合的通用获取方式。在取出集合之前判断有没有元素,如果有就把这个元素取出来,继续判断,还有继续取,直到全部取出
  • Iterator interator() 获取集合对应的迭代器,用来遍历集合的元素
举例:
Collection<String>  coll= new ArrayList<String>(); 
Iterator<String> it = coll.iterator();

2.常用方法

E          next()  返回迭代的下一个元素
boolean    hasNext()  判断是否有元素,并把指针移到下一个位置

3.使用步骤

  1. 使用集合接口中的方法iterator() 获取迭代器的实现类,使用Iterator接口接收(多态)

  2. 使用Iterator接口中的方法hasNext()判断还有没有下一个元素

  3. 使用Iterator接口中的方法next()取出下一个元素

二、Collection集合

在这里插入图片描述
java.util.Collection 是所有单列集合的最顶层接口,里边定义了所有单列集合共性的方法,集合是具有相同性质的多个元素汇聚成的整体,又称容器,可以用来存储多个数据

1.体系

  • 和数组区别
    • 数组长度固定,集合长度可变
    • 数组存储同一类型的元素,可以存储基本数据类型值
      集合存储的都是对象,而且对象的类型可以不一致
  • 常见子类接口 List、 Set、 Queue
    List实现了Iterator接口用于Collection集合的遍历
    在这里插入图片描述

2.常用方法

所有单列集合都可以使用Collection接口中的方法

1.boolean     add(E e) ;   向集合中添加元素,返回是否添加成功

2.boolean     remove(E e);  删除集合中的某个元素,返回是否删除失败

3.void         clear();     清空集合中的元素

4.boolean      contains(E e)   判断集合是否包含某个元素

5.boolean      isEmpty();     判断集合是否为空

6.int          size();        获取集合的长度、元素个数

7.Object[]     toArray()      将集合转成一个数组

8.Iterator<E>   interator()   返回在此collection的元素上迭代的迭代器,并把指针放在索引0前面

3.集合的遍历

public class IteratorDemo {
    
    
    public static void main(String[] args) {
    
    
    //创建集合对象
    Collection<String> c = new ArrayList<>();
    //添加元素
    c.add("hello");
    c.add("world");
    c.add("java");
    c.add("javaee");
    //Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
遍历方式1  迭代器
        Iterator<String> it = c.iterator();
        //获取迭代器的实现类对象,并把指针指向集合的0索引前面
        //用while循环改进元素的判断和获取
        while (it.hasNext()) {
    
    
            //判断是否还有下一个元素
            String s = it.next();
            //取出下一个元素,并把指针向后移动一位
            System.out.println(s);
            }
        }
遍历方式2  (增强for循环) foreach
      for(String str : c){
    
    
            System.out.println(i);
      }
      
遍历方式3  for循环
      for(int i =0 ;i<c.size();i++){
    
    
           System.out.println(c.get(i));
      }     
}

4.Collections工具类

java.utils.Collections
集合工具类 用来对集合进行操作

1.static  <T> boolean  addAll(Collection<T> c,T...elements)  
                   往集合中添加一些元素     
                   
2.static  void   shuff(list<?>  list)  打乱集合顺序

3.static  <T> void   sort(List<T> list) 将集合中元素按照默认规则排序
                          ArrayList排序默认规则是升序 

4.static  <T> void   sort(List<T> list,Comparator<? super T>) 
                    将集合中的元素按照指定规则排序 

三、数据结构(重要)

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率

1.栈(stack)

又称堆栈,运算受限的线性表,
其限制仅允许在标的一段进行插入和删除操作,不允许在其他位置添加查找删除操作

  • 采用该结构的集合,对元素存取有以下特点
    • 先进后出(存进去的元素,要在后面的 元素依次取出之后才能取出)
    • 栈的入口出口都在栈的顶端位置
      总结:先进后出
      在这里插入图片描述

2.队列(queue)

简称队,如同堆栈一样,也是运算受限的线性表。其限制是仅允许在表的一端进行插入,而在表的另一端进行删除

  • 采用该结构的集合,对元素的存取有以下特点
    • 先进先出 (存进去的元素,要在前面的元素依次取出之后,才能取出)
    • 队列的入口和出口各占用一侧
      总结:先进先出
      在这里插入图片描述

3.数组(Array)

是有序的元素序列,数组是在堆内存中开辟一段连续的空间,并在此空间存放元素。

  • 采用该结构的集合,对元素的存取有以下特点
    • 查找快 通过索引,可以快速定位访问位置的元素
    • 增删慢 创建一个新数组,将新元素存储在指定索引位置,再把原数组元素根据索引复制到新的位置
      在堆内存中频繁的创建数组,复制数组中的元素,销毁数组,效率低下
      总结:查找快,增删慢
      在这里插入图片描述

4.链表:(linked list)

由一系列结点:(note,链表中的每一个元素称为结点),节点可以动态生成。
每个结点包括两个部分,一个是存储数据元素的数据域,另一个是存储结点地址的指针域,有单向链表和双向链表之分,

  • 单向链表指针域存储下一个结点地址
    只有一条链子不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)
  • 双向链表指针域存储上一个和下一个结点地址
    双向链表有两条链子,一条专门记录元素的顺序,是一个有序的集合
  • 采用该结构的集合,对元素的存取有以下特点
    • 多个结点之间,通过地址进行连接
    • 查找慢,想要查找某个元素,需要通过连接的结点,依次查找指定元素
    • 增删快,只需要修改连接下个元素的地址即可
      总结: 查询慢:链表中地址不是连续的,每次查询元素都得从头开始
      增删快:链表结构增删一个元素,对链表的整体结构没有影响
      在这里插入图片描述

5.红黑树(Red-Black Tree)

  • 二叉树:(binary tree),每个结点不超过2的有序树 (tree),二叉树是每个节点有两个子树的树结构

  • 顶上的叫根节点;两边分别叫左子树和右子树叶子节点:没有子树的节点

  • 平衡树:左子树和右子树数量相等

  • 不平衡树:左子树和右子树数量不相等

  • 红黑树:
    (趋近于平衡树,查询速度非常快,查询叶子节点最大次数和最小次数不能超过两倍)

       约束:1.叶子节点可以是红色或者黑色
            2.根节点是黑色的
            3.叶子节点(空节点)是黑色的 (这里是指为空(NIL或NULL)的叶子节点 )
            4.每个红色节点的子节点都是黑色的
            5.任何一个节点到其每个子节点上所有路径上黑色节点数相同
    

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/XIAOMAO1REN/article/details/115129751