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文件)


posted @ 2019-12-07 21:18  星然  阅读(455)  评论(0编辑  收藏  举报