2021-04-10

集合、List、Set

1.集合

1.1是什么
是使程序能够存储和操作元素不固定的一组数据
集合长度不固定,不能存放基本数据类型,只能存放对象的引用
如果集合存放基本数据类型,一定要将其装箱成对应的基本数据包装类
1.2继承体系
Java的集合类主要由两个接口派生而出:Collection和Map。Collection和Map是Java结合框架的根接口,这两个接口又包含了一些子接口或实现类。
下面我们列举出最常用的几个子接口和实现类:
Collection ——> List ——> ArrayList类
Collection ——> List ——> LinkedList类
Collection ——> Set ——> HashSet类
Collection ——> Set ——> SortedSet接口 ——> TreeSet类
Map ——> HashMap类
Map ——> SortedMap ——> TreeMap类
1.3Collection
boolean add(Object o) 添加元素
void clear() 清除集合里的所有元素
boolean contains (Object o)返回集合里是否包含指定元素
boolean containsAll(Collection c)返回集合里是否包含集合c里的所有元素
int hashCode()返回collection的哈希值
boolean isEmpty() 返回集合是否为空
Iterator iterator() 返回一个Iterator对象用于遍历集合里的数组

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**

  • Iterator : 迭代器

  •  迭代器是一种模式,又称光标,他可以使对于序列类型的数据结构的遍历行为与被遍历的对象分离
    
  •  我们不需要关心该序列底层数据结构是什么样子的,只要拿到这个对象,使用迭代器就可以进行遍历这个集合对象
    
  •  生成迭代器
    
  •  Iterator it = 集合对象.iterator();
    
  •  迭代器为了方便遍历,提供了三个方法
    
  •  	1 boolean hasNext() : 判断光标的下一位是不是还有元素,有就是true,没有就是false
    
  •  	2 E next() : 将迭代器光标向下移动一位,并取出该元素 Element
    
  •  	3 remove() : 删除当前指向的元素
    
  •  迭代器一旦创建,集合不能进行添加和删除操作,如果 添加或删除了.必须重新生成迭代器
    
  •  增强for循环 forEach 就是为了让iterator循环访问的形式简单,写起来方便,但是也是不能进行添加和删除的
    
  •  使用普通的for和while是可以进行添加删除的,这种遍历还是和数据结构存储相关的 
    
  • @author 天亮教育-帅气多汁你泽哥

  • @Date 2021年4月10日
    */
    public class Collection_02 {

    public static void main(String[] args) {
    Collection x = new ArrayList();
    x.add(1);
    x.add(2);
    x.add(3);
    x.add(4);
    x.add(“张三”);
    // 生成迭代器
    Iterator it = x.iterator();
    x.add(5);
    // 如果添加或删除了集合中的数据,则迭代器需要重新生成
    // it.next();
    it = x.iterator();

     // 判断还有没有数据,有就执行
     while(it.hasNext()){
     	// 光标向下移动一位,并取出数据
     	Object e = it.next();
     	System.out.println(e);
     	// 删除当前指向的元素(必须使用迭代器的删除,否则报错)
     	it.remove();
     }
     System.out.println(x);
     // false 因为已经移动到最后了,此时想要继续使用必须重新生成
     System.out.println(it.hasNext());
    

    }
    }
    1.4 Iterator
    Iterator it = x.iterator();
    while(it.hasNext){
    Object e = it.next();
    System.out.println(e);
    }
    1.5注意
    使用contains 和remove的时候 如果是自定义类型,需要根据需求覆写equals方法
    1.6 List
    1.6.1特性
    有序,可重复
    有指定下标,添加顺序和取出顺序一致
    ArrayList : 底层是个Object[] 数组,随机查询效率高,随机删除效率低,默认初始化时10,扩大之后是原来的1.5倍,并且是第一次添加数据的时候进行默认长度设置,只new的时候,不添加数据,则长度为0, 等于是 Object[] elementData= {}; 长度为0
    LinkedList : 底层是双向链表,随机查询效率低,随机删除效率高
    Vector : 已经过时,属于线程安全,而ArrayList是Vector的升级版 , 默认初始化是10,扩大之后是原来的2倍
    1.6.2ArrayList
    注意 : remove有方法重载,一个int (要删除的索引) 一个 object(要删除的数据)
    这个2 是删除的索引,并不是要删除2这个元素
    list.remove(2);
    这样才是删除2这个数据
    list.remove(new Integer(2));
    1.6.3
    LinkedList
    LinkedList linkedList = new LinkedList();
    // 尾部添加 true
    linkedList.add(1);
    // 尾部添加 void
    linkedList.addLast(98);
    // 插入指定位置
    linkedList.add(0,3);
    // 首部添加 void
    linkedList.addFirst(2);

     // 首部添加 void
     linkedList.push(3);
     
     
     // 尾部添加 true
     linkedList.offer(22);
     // 首部添加 true
     linkedList.offerFirst(1);
     // 尾部添加 true
     linkedList.offerLast(4);
     System.out.println(linkedList);
     
     // 本质就是在调用两个方法 : linkLast 和 linkFirst
     // 根据下标获取
     System.out.println(linkedList.get(0));
     System.out.println(linkedList.get(0));
     // 获取首元素
     System.out.println(linkedList.getFirst());
     // 获取尾元素
     System.out.println(linkedList.getLast());
     // 删除第一个元素,并返回该元素
     linkedList.pop();
     // 删除最后一个元素,并返回该元素
     linkedList.poll();
     // remove重载  int是根据索引删除, Object 是根据内容删除
     linkedList.remove(1);
     linkedList.remove(  new Integer(22) );
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值