javaee基础集合

javaee基础集合,第1张

javaee基础集合 集合 集合 集合概述:集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组的对比
    1. 数组固定长度,集合可以变长
  1. 数组可以存基本类型和引用类型,集合只能存引用类型
集合的体系 Collections工具类
  • public static void shuffle(List list) : // 打乱集合顺序。
    public static void sort(List list) : // 将集合中元素按照默认规则排序。
    public static void sort(List list,Comparator ) : // 将集合中元素按照指定规则排序。
    static boolean addAll(Collection c, T… elements): // 将所有指定的元素添加到指定的集合。

    • 案例
  • Comparator比较器

    • 指定排序的规则的一个接口(java.util包下),重写该接口下的一个方法compare(T o1, T o2)即可!

      • // 升序排序!
        Collections.sort(list1, new Comparator() {
        // 此方法是排序的核心
        @Override
        public int compare(Integer o1, Integer o2) {
        // 前-后 升序! 后-前 降序!(前后针对的是2个参数o)
        return o1-o2;
        }
Collection是所有单列集合的父接口 List接口特点 : 有序!可重复!有索引 【子类ArrayList和linkedList都有这些特点】 List list = new ArrayList<>();
  • 特有方法

  • ArrayList 主要实现类

    • public boolean add(E e); // 直接在集合的末尾添加元素数据e
      public void add(int index,E e); // 在集合指定index索引位置添加元素数据e
      public E get(int index); // 获得集合总指定index索引位置的元素数据
      public E remove(int index); // 删除集合中指定index索引位置的元素数据
      public boolean remove(Object obj); // 删除集合中指定的元素数据obj
      public E set(int index,E e); // 将集合index索引位置的元素数据修改为e
      public int size(); // 获得集合里面元素数据的个数!
  • java.util.linkedList集合数据存储的结构是链表结构(双向链表)。方便元素添加、删除的集合。

    • public void addFirst(E e): //将指定元素插入此列表的开头。
      public void addLast(E e): // 将指定元素添加到此列表的结尾。
      public E getFirst(): // 返回此列表的第一个元素。
      public E getLast(): // 返回此列表的最后一个元素。
      public E removeFirst(): // 移除并返回此列表的第一个元素。
      public E removeLast(): // 移除并返回此列表的最后一个元素。
      public E pop(): // 从此列表所表示的堆栈处d出一个元素。
      public void push(E e): // 将元素推入此列表所表示的堆栈。
      public boolean isEmpty():// 如果列表不包含元素,则返回true。
Collection 共性方法
  • 创建Collection接口的子类对象
    Collection coll = new ArrayList();

    • 作为父接口,提供的是所有单列集合共性的方法,没有 索引相关的 *** 作方法 比如 get(index)
      索引相关的 *** 作 属于List特有的方法

Set 不可重复
  • .HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不能保证一致)。 HashSet set = new HashSet<>();

    • 给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一。

      • 重写hashCode和equals方法,每new一个对象,都是一个新的(地址值不一样,hash值一样)【hash值一样,那么向set里面添加不进去第二个对象了】
    • .linkedHashSet是HashSet下面有一个子类java.util.linkedHashSet,它是链表(有序)和哈希表(数组、链表、红黑树)组合的一个数据存储结构。

      • 案例
  • 三种Set集合特点对比

      • HashSet:
        无序(存进去元素数据的顺序与取出来的元素数据的顺序不一样),不可重复! linkedHashSet:
        有序(存进去是什么顺序,取出来就是什么顺序),不可重复! TreeSet:
        可排序(默认自然顺序,可以重写Comparator接口的compare方法指定规则排序),不可重复!
  • TreeSet集合是Set接口的一个实现类,底层依赖于TreeMap,是一种基于红黑树的实现

      1. 元素唯一(不可重复)
  1. 元素没有索引

  2. 使用元素的自然顺序对元素进行排序,或者根据创建 TreeSet 时提供的 Comparator 比较器 进行排序,具体取决于使用的构造方法:

     - 案例
    
泛型概述:在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的 *** 作,这时必须采用类型转换。 泛型可以灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。 使用泛型的好处① 将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

② 避免了类型强转的麻烦。

Map 双列集合 * HashMap:存储数据采用的哈希表(数组、链表、红黑树)结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
    • linkedHashMap:HashMap下有个子类linkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
* TreeMap:TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序 Map的遍历 【重点】 // 获得map中所有的key
    Set keys = map.keySet();
    for (String key : keys) {
        //System.out.println("key:"+key);
        // 通过key获得value
        String value = map.get(key);
        System.out.println("key="+ key+", value="+value);
    }
  • // 通过map的engtrySet()方法获得map中所有(key,value)键值对(entry实体)构成的Set集合
    Set> entrySet = map.entrySet();
    // 遍历set集合,获得单个的(key,value)键值对(entry实体)
    for (Map.Entry entry : entrySet) {
    // 直接通过getKey获得键(key)的值!通过getValue获得值(value)的值!
    System.out.println(“key=”+entry.getKey()+", value="+entry.getValue());
    }
Map的常用方法 public V put(K key, V value) : // 把指定的键与指定的值添加到Map集合中。

public V remove(Object key) : // 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key): // 根据指定的键,在Map集合中获取对应的值。
public Set keySet() : // 获取Map集合中所有的键,存储到Set集合中。
public Set> entrySet() : // 获取到Map集合中所有的键值对对象的集合(Set集合)。
public boolean containKey(Object key) : // 判断该集合中是否有此键。

Iterator接口 增强for循环(也称for each循环)
  • for(数据类型 变量名称:集合对象或者数组){ }
    【快捷键:被遍历集合对象.iter+回车】
通过集合对象获得迭代器对象

Iterator iterator = coll.iterator();

  • Iterator接口的常用方法: ·
    public boolean hasNext(): // 如果仍有元素可以迭代,则返回 true。
    public E next(): // 返回迭代的下一个元素。

    • 注意1:在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException没有集合元素异常
      注意2:在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.

        1. 首先创建迭代器对象,集合对象.iterator(); 2. hastNext() 判断是否有下一个元素 3. next();//取出元素
      • 无法重复遍历集合。除非重新创建迭代器对象

        • 迭代器对象.remove();
          每删除一个,cursor属性回退一个

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5678524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存