集合

本文详细介绍了Java集合框架中的主要组件,包括ArrayList、LinkedList、HashSet、TreeSet和HashMap等,对比了它们的特点和适用场景,帮助读者理解不同集合类型的选择依据。
摘要由CSDN通过智能技术生成

集合

  • java集合框架提供了一套性能优良、使用方便的接口和类,它们都位于java.util包中。
  • 集合作为容器应该具有增、删、改、查的功能,但是也不一定都具备。

一、ArrayList

  • ArrayList实现了数组长度可变,在内存中分配连续的空间。
  • contains()、remove()都需要重写equals方法
  • ArrayList底层使用数组存储(连续)
  • ArrayList的优缺点

    • 优点:遍历数组和随机访问元素的效率比较高
    • 缺点:添加和删除需要移动大量元素,按照内容查询效率低

          public class ArrayListDemo1 {
          public static void main(String[] args) {
              List list = new ArrayList();
              list.add(new Student("王五", 20));
              list.add(new Student("张三", 10));
              list.add(new Student("李四", 20));
              //根据索引位置添加数据
              list.add(0, new Student("李四", 20));
              print(list);
              System.out.println("***************");
              //删除元素,但是需要重写equals方法
      //      list.remove(new Student("张三",10));
              //移除列表中的元素
      //      list.clear();
              //是否包含指定的元素  ,需要重写equals方法
      //      boolean contains = list.contains(new Student("王五",20));
      //      System.out.println(contains);
              //将指定索引替换成指定内容
      //      list.set(1, new Student("赵六",30));
              print(list);
          }
          private static void print(List list) {
              for (int i = 0; i < list.size(); i++) {
                  System.out.println(list.get(i));
              }
          }
      }
      

二、LinkedList

  • contains()、remove()都需要重写equals方法
  • LinkedList底层使用链表存储,不连续
  • LinkedList优缺点

    • 优点:插入删除元素时效率比较高
    • 缺点:遍历和随机访问元素效率低下
  • ArrayList和LinkedList的用法差不多,就不进行演示了

三、HashSet

  • 重写equals、hashCode方法可以实现自动去重的功能
  • contains()、remove()需要重写equals、hashCode方法
  • HashSet使用数组+链表实现
  • HashSet优缺点

    • 优点:添加、删除、查询速度快
    • 缺点:添加的元素是无序的

      public class HashSetDemo1 {
      public static void main(String[] args) {
          Set set = new HashSet();
          set.add(new Student("王五", 20));
          set.add(new Student("张三", 10));
          set.add(new Student("李四", 20));
          print(set);
          System.out.println("************");
          // 移除所有数据
          // set.clear();
          // 是否包含指定元素 需要重写equals方法和HashCode方法
          // boolean contains = set.contains(new Student("张三", 10));
          // System.out.println(contains);
          // 删除指定元素 需要重写equals方法和HashCode方法
          set.remove(new Student("李四", 20));
          print(set);
      }
      
      private static void print(Set set) {
          for (Object s : set) {
              System.out.println(s);
          }
      }
      

      }

四、TreeSet

  • 实现Comparable接口、重写compareTo方法可以实现自动去重的功能
  • contains()、remove()需要实现Comparable接口、重写compareTo方法
  • 采用二叉树(红黑树)的存储结构
  • TreeSet优缺点

    • 优点 : 查询速度比list快(升序按照内容查询)
    • 缺电 : 查询速度没有HashSet快

          public class TreeSetDemo {
          public static void main(String[] args) {
              Set set=new TreeSet();
              set.add(new Student("李四",20));
              set.add(new Student("张三", 10));
              set.add(new Student("李四",20));
              set.add(new Student("张三", 10));
              print(set);
              System.out.println("***************");
      //      boolean contains = set.contains(new Student("张三", 10));
      //      System.out.println(contains);
              set.remove(new Student("李四",20));
              print(set);
          }
          private static void print(Set set) {
      //      for(Object o :set){
      //          System.out.println(o);
      //      }
              for(int i=0;i<set.size();i++){
                  Object[] array = set.toArray();
                  System.out.println(array[i]);
              }
          }
      }
      

五、映射

1.HashMap

        Map<K, V> map=new HashMap<key>();

* K代表Key 无序的 唯一的
* V代表Value 无序的不唯一的

    Map<String,String> map=new HashMap<>();
    map.put("姓名", "张三");
    //Map<String,String>value只能写String类型
    map.put("年龄", 10);

2.TreeMap

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TestTreeMap1 {
public static void main(String[] args) {
    Map map=new TreeMap<>();
    //key实现了排序
    map.put("2", "c");
    map.put("1", "b");
    map.put("3", "d");
    map.put("4", "a");
    print(map);
}
private static void print(Map map) {
    Set keySet = map.keySet();
    for(Object o:keySet){
        System.out.println(o+"----"+map.get(o));
    }
}
}

五、泛型

  • List <>括号中放什么,集合中只能存什么类型 (其他类型同理 比如:HashSet)
  •     //说明集合中只能放String类型的
    List<String> list=new ArrayList<>();    
    
  • Map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值