集合框架

本文深入探讨了Java集合框架的核心概念,包括List、Set的主要实现形式如ArrayList、LinkedList、HashSet及TreeSet的特点与应用场景,并介绍了如何使用泛型以及集合工具类Collections进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合框架

Iterable 迭代器的使用,访问Collection中的元素

  • Collection(用于储存一系列符合元素的规则) List()(ArrayList(是List的接口实现类),LinkedList);
  • ArrayList例(遍历元素和随机访问元素的效率比较高)

    import java.util.List;
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class LianXi3{
        public static void main(String[] args) {
        //创建ArrayList集合
        //多态,依赖倒转。
        List list=new ArrayList();
        //增删改查
        list.add(new Student("张三",25));
        list.add(new Student("李四",10));
        list.add(new Student("王五",16));
        list.add(new Student("赵六",6));
        //删除指定位置的元素
        list.remove(2);
        //移除列表中的所有元素
        list.clear();
        print(list);
        System.out.println("----------");
        //遍历数组的方式1利用iterator进行遍历
        Iterator iterator=list.iterator();
        while(iterator.hasNext()){
            Object next=iterator.next();
            System.out.println(next);
        }
    }
    
    private static void print(List list) {
        //遍历数组的方式2
        // TODO Auto-generated method stub
        for(int i=0;i<list.size();i++){
            Student s=(Student)list.get(i);
            System.out.println(s);
        }
    }
    }
    
  • LinkedLists(优点:遍历元素和随机访问元素。缺点:添加和删除需要大量移动元素,按照内容查找)

    package jichenglainxi;
    
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    
    public class LianXi4 {
        public static void main(String[] args) {
            List list =new LinkedList<>();
            list.add(new Student("李四",10));
            list.add(new Student("王五",16));
            list.add(new Student("赵六",6));
            list.get(1);
            list.set(1, new Student("赵六",5));       
            //如果此 collection 不包含元素,则list true。
            list.isEmpty();
            //包含指定元素返回true;
            list.contains(2);   
            list.clear();
            print(list);
            //迭代器
            Iterator iterator=list.iterator();
            while(iterator.hasNext()){
                Object next=iterator.next();
                iterator.remove();
                System.out.println(next);
            }
    
        }
    
        private static void print(List list) {
            // TODO Auto-generated method stub
            for(Object g:list){
                System.out.println(g);
            }
        }
    
    }
    
  • set

    • hashSet() 底层使用数组加链表。对象—>获取对象的hashcode方法需要重写equals方法和HashSet方法

      import java.util.HashSet;
      import java.util.Iterator;
      import java.util.Set;
      public class LianXi5 {
          public static void main(String[] args) {
              Set<Object> set=new HashSet<>();
              set.add(new Student("张三", 10));
              set.add(new Student("张三", 11));
              set.add(new Student("李四", 10));
              set.add(new Student("张三", 10));
              set.add(new Student("李四", 10));
              print(set);
          }
          @Override
          public boolean equals(Object obj) {
              // TODO Auto-generated method stub
              return super.equals(obj);
          }
      
          private static void print(Set set) {
              Iterator iterator = set.iterator();
              while(iterator.hasNext()){
                  System.out.println(iterator.next());
              }
          }
      
    • TreeSet (二叉树的存储结构,排序后是升序,查询的速度要比List快没有HashSet快,需要实现Compareable或者new Set(Compartor)CompareTo比较是否相等,二叉树比较的是大小)

      public class Student {
          private String name;
          private int age;
          public Student(String name,int age){
              this.name=name;
              this.age=age;
          }
          @Override
          //重写toString方法,
          public String toString() {
              // TODO Auto-generated method stub
              return "姓名:"+name+",年龄:"+age;
          }
          @Override
          //需要重写equals和HashCode方法
          public boolean equals(Object obj) {
              Student s=(Student)obj;
              //利用toString方法
              return s.toString().equals(this.toString());
              //如果不重写toString方法 可以用这样的方式进行比较
      //      return s.name.equals(this.name)&&s.age==this.age;
          }
          @Override
          public int hashCode() {
              return toString().hashCode();
          }
      }
      
    • import java.util.HashSet;
      import java.util.Iterator;
      import java.util.Set;
      public class LianXi5 {
          public static void main(String[] args) {
              Set<Object> set=new HashSet<>();
              //Student类里重写equals方法和HashCode方法
              set.add(new Student("张三", 10));
              set.add(new Student("张三", 11));
              set.add(new Student("李四", 10));
              set.add(new Student("张三", 10));
              set.add(new Student("李四", 10));
              print(set);
          }
          //遍历数组
          private static void print(Set set) {
              Iterator iterator = set.iterator();
              while(iterator.hasNext()){
                  System.out.println(iterator.next());
              }
          }
      
      }
      
    • 泛型;

          public class LianXi6 {
              public static void main(String[] args) {
                  //创建ArrayList集合,使用泛型
                  ArrayList<String>list=new ArrayList<String>();
                  //添加字符串对象
                  list.add("String");
                  list.add("Collection");
                  //遍历集合
                  for(String str:list){
                      System.out.println(str);
                  }
              }
      
          }
      
    • 给类定义泛型

      public class LianXi7<T> {
          T temp;
          public void save(T temp){
              this.temp=temp;
          }
          public T get(){
              return temp;
          }
      
      }
      
    • public class LianXi8 {
          public static void main(String[] args) {
              LianXi7<Integer>pool=new LianXi7<Integer>();
              pool.save(new Integer(1));
              Integer temp=pool.get();
              System.out.println(temp);
          }
      
      }
      
  • Collections:集合的工具类

    • import java.util.ArrayList;
      import java.util.Collections;
      
      public class LianXi9 {
          public static void main(String[] args) {
              ArrayList list=new ArrayList();
              Collections.addAll(list, "C","A","D","B");
              System.out.println("排序前:"+list);
              Collections.reverse(list);
              System.out.println("反转后:"+list);
              Collections.sort(list);
              System.out.println("按自然排序后"+list);
          }
      
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值