当前位置: 代码迷 >> 综合 >> Collection 集合List 和set2
  详细解决方案

Collection 集合List 和set2

热度:79   发布时间:2023-09-18 11:37:33.0

Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字/值对

1,collection :所有集合框架的父接口-----有两个子接口:list 和set两个接口

   1.1  List :有序集合的父接口 ,两个常用实现类:ArrayList  和LinkedList 

      1.1.1 ArrayList :内部使用数组实现,此中存储的元素都有固定索引,索引从0开始,快速检索时效率高,由于数组长度定义之后不可改变在进行更新的时候是开销较大的

Tip: 集合遍历时如何删除集合中的元素,对ArrayList进行遍历时不要用自带的remove()方法

在迭代器(iterator)中调用List.remove()方法会报错ConcurrentModificationException

  iterator只能迭代一次,如果还要迭代,需要再次获取iterator

Iterator it = list.iterator();list为List的引用:

  while(it.hasNext()){//hasNext()判断iteration是否有元素,有的话返回true

   Object obj  = it.next();//next()返回迭代器中的下一个元素

   if(条件){

       it.remove();//remove()从集合中删除数据

}

  }

ListIterator 可以反向迭代数据 list.listIterator()获取ListIterator 对象

 构造方法之一: ArrayList(Collection<? extendsE> c) :将一个Collection对象,作为参数传给另个构造方法

    函数:泛型--在程序编译过程中对于集合的类型进行检查,保证类型安全(jdk1.7特性)

      void  clear() 清楚集合中的所有元素

   boolean  contains(Object o) 如果集合中包含0,则返回true

   E  get(int index) 返回集合中指定位置的元素 

   boolean add(E e) 在集合最后添加指定元素

   E  set(int index,E element)将集合中指定位置的数据更换掉

   void add(int index,E element)将集合中指定的位置添加数据

  1.1.2 LinkedList:内部基于链表的实现,检索时只能通过指针依次检索,检索时效率低,但是添加和修改效率高,只需修改元素首位指针

  boolean  add(E e) 在集合中添加指定元素

   E get(int index) 获取集合中指定位置的元素

  LinkedList<String> ll = new LinkedList<>();
ll.add("A");
ll.add("B");
ll.add("C");
ll.add("D");
ll.add("E");
ll.addFirst("FIRST");
ll.addLast("LAST");
System.out.println(ll);//[FIRST, A, B, C, D, E, LAST]
System.out.println(ll.getFirst());//FIRST

    1.2  set :无序集合的父接口(第二次出现的会覆盖第一个),两个常用实现类:HashSet 和TreeSet

     1.2.1 HashSet :使用哈希算法对添加的元素进行排序,跟输入的元素顺序无关,并且重复的元素不允许出                现,实际上是HasHMap实例,不保证里面元素的顺序永久不变,也可包含null元素

          HashSet<String>  set = new HashSet<>();
set.add("AS");
set.add("BS");
set.add("CS");
set.add("DS");
for(String s : set){
System.out.println(s);
}
System.out.println("-----------");
Iterator<String>  it =  set.iterator();
while(it.hasNext()){
String ss = it.next();
System.out.println("ss="+ss);
}

输出的结果:

CS
BS
AS
DS
-----------
ss=CS
ss=BS
ss=AS
ss=DS    

 

     1.2.2 TreeSet :能对元素进行排序(默认自然排序),但要求元素类型一致


2,集合的工具类Collections:包含全是静态方法

 static void reverse(List<?> list) 将集合元素反转显示

 static <T extends Comparable<? super T>> void   sort(List<T> list)//对集合中的元素使用自然顺序(元素实现的Comparable接口中的compareTo)排序


  static <T> void  sort(List<T> list, Comparator<? super T> c)//如果c为null则默认自然排序或者写一个类实现Comparator<bean> 重写compare(1,2)方法,如果返回1表示参数1比2 大,返回-1则参数1比2小,返回0则参数1=2。

Tip:Comparator <>一般独立创建一个类实现 Comparable<bean>一般用于需要比较的实体类上实现Comparable<bean>


  相关解决方案