• Java集合总结


    集合

    集合的特点:元素类型可以不同、集合长度可变、空间不固定

    集合长度:.size() 获取size属性的长度

    数组长度:.length()

    格式:

    ArrayList list = new ArrayList();

    System.out.println(list .size());

    list.get(i) :下标 通过集合下标获取集合中每个值

    ​ for (int i = 0; i < list.size(); i++) {

             System.out.println(list.get(i));

    }

    一、ArrayList 添加,可以添加重复的数据

    增 删 改 查

    1、增

    list.add( ); 括号里面可添加任意类型,包含null(可重复数据)

    list.add( index,element );

    index:下标位置从0--listsize(); 挤掉 原来的数(往后)

     

    2、删除

    list.remove( );

    集合的删除 括号里面为int类型 如果删除传入int类型 会默认为集合的下标

    注意: 代码编译不会报错,运行时会报错

    例: list.remove("111");

     System.out.println("=============================="+list.size());

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

     }

    可使用:如果一定要删除int类型的值,那么必须使用封装类

    例: list.remove(new Integer(111));

     System.out.println("=============================="+list.size());

                for (int i = 0; i < list.size(); i++) {

          System.out.println(list.get(i)); 

     }

    3、修改: list.set(下标 ,新的值 ) ;

    注意:下标是否越界

    例:list.set(0, 222);

          System.out.println("=============================="+list.size());

          for (int i = 0; i < list.size(); i++) {

    ​       System.out.println(list.get(i));

    }

    集合指定位置:不能跳着加,添加不能超出原来集合的最大长度

    例: list.add(5,222);

            list.add(6,333);

            list.add(7,444);

       System.out.println("=============================="+list.size());

      for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
    }

    4、查list.indexOf()

    查找集合中的某个值:list.indexOf() / list.lastIndexOf() 返回指定数据第一次被查找到在集合中的下标

    如果没有找到返回-1

          System.out.println(list.indexOf("aaa"));

          System.out.println(list.lastIndexOf("aaa"));

          System.out.println(list.contains("aaa"));

    手动添加一个null,找到返回为true,没找到返回为false

            System.out.println(list.contains(null));

    判断集合是否为空: list.isEmpty() list.size()

          list.isEmpty();    //  false 不为空

           list.size();    //  !=0 不为空 System.out.println( list.isEmpty());

            System.out.println( list.size());

    清空集合中的所有元素:list.clear()

            System.out.println(list.size());


    集合关键字的区别

    1、 ArrayList、Vector和Stack有什么区别?

    1、ArrayList的方法和实现基本上和Vector一样,底层都是数组的实现(简:API基本一样) 2、Stack继承了Vector,两者的方法都是线程安全,ArrayList没有考虑线程的问题 3、vector速度慢,ArrayList做了优化,效率更高

     

    2、 ArrayList 和 LinkedList 的区别?

      1、 ArrayList底层是数组的实现,linkedList底层是连接的实现(简:数据结构不同)

              1.1在java中链表就是自己实现一个类,在类中记录了前一个和后一个的地址,每次查找都需要找到前一个或后一个才能往前或者往后找

       2、ArrayList查找速度快,删除和插入速度慢 (常用)

       3、LinkedList查找速度慢,删除和插入速度快

        4、LinkedList有自己独有的方法:addFirst() addLast() removeLast() removeFirst()。(首尾重要)

    3、set和List的区别?

    ① set接口下的集合特点:

    1、没有下标 ​ 2、无序的 ​ 3、不能重复(前面的被后面的覆盖)

    ② List接口下的集合特点:

    1、有下标 ​  2、有序的(按照添加的顺序获取) ​ 3、可以重复

    set转list:

    List< 类名 > list = new ArrayList< >( set类 );

     

     

    4、collections 和collection的区别?

    collections是java.util下的工具类,其下有 set 及 list;

    collection是java.util下的接口;

     

    5、HashSet 和TreeSet的区别?

    HashSet不可以排序

    TreeSet可以排序(但是他是用自己的一种方排序规则排序),实现自定义类的排序时必须实现Compare接口的compareTo方法

     

    1、HashSet(hashset比较是否相等,根据两个对象的哈希值)

    1、HashSet不可以排序

       1)、add()--- 添加元素,会先判断是否为同一对象。出于业务上的考虑我们需要重写HasgCoda方法和equals方法,来判断两个对象是业务上的相等。

       2)、remove(Object o)--- 将元素从集合中移除

        3)、size()---查看集合长度

     

    HashSet特点:

      1)、遍历时没有顺序,

      2)、允许包含null

      3)、类中不允许出现重复元素。

      4)、不能有for循环遍历能用foreach或while循环遍历

     

    2、TreeSet

    1、TreeSet可以排序(但是他是用自己的一种方排序规则排序),实现自定义类的排序时必须实现Compare接口的compareTo方法

       1)、first()----返回第一个元素

       2)、last()----返回最后一个元素

       3)、pollLast()---删除最后一个元素

       4)、pollFirst()---删除第一个元素

     1、使用外部比较器对TreeSet中的元素进行排序,外部比较器作为TreeSet的构造方法参数传递过去。

    2、使用外部比较器,我们自定义的类可以不用实现CompareTo

     

    3、Hash的优缺点:

    优点:删,增、查很快,提高存储率

    缺点:无序,不可重复

     

     

    6、Comparable和Comparator的区别?

    Comparable在java.long包;

    Comparator在java.util包;

     


     

    7、集合和数组的区别?

    ①、数组创建长度固定,集合长度会随集合元素的添加自动扩展。

    ②、集合中只能存放对象的引用,而数组可以有基本类型,也可以有引用类型。

    ③、集合中的算法更加丰富,使用集合操作数据会比数组简洁。


     

    集合的遍历

    1、for循环遍历(只能遍历数组为底层的集合)

       for (int i = 0; i <List.size(); i++) {

           System.out.println(List.get(i));

    }

    2、增强for循环(foreach循环)

       for(Object obj : set) {

    ​        System.out.println(obj);

    ​ }

    3、 迭代器 Iterator

      Iterator it = set.iterator();

         while (it.hasNext()) {

         Object object = it.next();

         System.out.println(object);

     }

     

    注意:

    1、ArrayList 用for循环效率最高;

    2、LinkedLis用Iterator和for循环效率高;

    3、set用增强foreach循环和Itertor效率高

    4、hashset不能用for循环;

     


    集合的工具类

    Comparable和Comparator

    Comparator:

    1、Comparator在java.util包;

    2、Comparator必须实现方法 compare(User o1 , User o2) ;

    Comparable:

    1、 Comparable必须实现方法compareTo(User o ) ;

    2、 Comparable在java.long包;

     

    collections.sort();方法使用的两种方式:

    1、compareable 在 java.lang包下 实体类必须实现compareable

    必须实现 在对象的实体类中compare to方法

    2、comparator在java.util下 新建类必须实现comparator

    必须实现compare方法

    需要新建类或内部类来实现

     

    import java.util.Comparator;

    public class StudentCompare implements Comparator<Student>{

    @Override(重写)

    public int compare(Student o1, Student o2) {

           if(o1 == null || o2 == null) {

                   return 0;

         }

             return o1.getId() - o2.getId();

        }

    }

    范型 < E > 父类指向子类

    尖括号里写:是什么类型的,第二个尖括号可写可不写

    List< > list = new ArrayList< >( );



    Map (键值对)

    格式:

    Map< , > map = new HashMap< , >( );

    map.put( 键 , 键值 )

    System.out.println( map.put( 键 ));

    注意:①如果键值一样,只会打印最后出现的那一个,前面的内容会被最后一个覆盖;

    ② 键不可以重复,键值可以重复;

     

    获取HashMap所有键:

    set< 键的类型 > keys = map.keyset( );

    获取HashMap中所有的值:

    collection< 值的类型 > stu = map.values( );

    for( String key : keys ){

    System.out.println( key );

    }

    获取map的entryset: map.entryset( );

    set<map.Entry< String(键类型) , student(值类型) > > entrys = map.entryset( );


    内部类

    内部类:在当前类的内部新建一个类,只在当前类的内部使用

    Boy是Person的内部类

    Person.Boy boy = new Person( ).new Boy( );

    注意Boy类的修饰符

    class文件 Person$Boy.class (内部类也会生成class文件)


  • 相关阅读:
    不懂数据库索引的底层原理?那是因为你心里没点b树
    你必须了解的java内存管理机制(三)-垃圾标记
    一次给女朋友转账引发我对分布式事务的思考
    看完此文,妈妈还会担心你docker入不了门?
    再过半小时,你就能明白kafka的工作原理了
    IEEE 754浮点数表示标准
    ROM正弦波发生器
    对分布式工程的初步认识和理解
    泛型(二)
    泛型(一)
  • 原文地址:https://www.cnblogs.com/suger-4/p/12003154.html
Copyright © 2020-2023  润新知