黑马程序员-集合

---------------------- android开发java培训、期待与您交流! ----------------------

黑马程序员-集合

Collection层次结构的根接口。Collection表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 SetList)实现。此接口通常用来collection并在需要最大普遍性的地方操作这些 collection。

此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则指定这些方法抛出 UnsupportedOperationException。如果是这样,那么在调用对该 collection 无效时,这些方法可能,但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该 collection 调用 addAll(Collection)方法时,可能但并不一定抛出异常。

一些 collection 实现对它们可能包含的元素有所限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检查的异常,通常是 NullPointerExceptionClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回 false;某些实现将表现出前一种行为,而某些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素插入 collection 中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。

集合的四大优点:

1,提供有用的数据结构和算法,从而减少编程工作;提供极大的便利性!

2,提高了程序速度和质量,因为它提供了高性能的数据结构和算法;提高数据操作的质量和性能!

3,允许不同 API 之间的互操作,API之间可以来回传递集合;

4,可以方便地扩展或改写集合;

集合框架中常用的接口:Collection 是将多个元素组成一个单元的对象;

Collection中的共性方法:

1:add() 将指定对象存储到容器中;add 方法的参数类型是Object 便于接收任意对象

2:addAll() 将指定集合中的元素添加到调用该方法和集合中

3:remove() 将指定的对象从集合中删除

4:removeAll() 将指定集合中的元素删除

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

6:isEmpty() 判断集合是否为空

7:contains() 判断集合何中是否包含指定对象

8:containsAll() 判断集合中是否包含指定集合;使用equals()判断两个对象是否相等 

 9:int size()    返回集合容器的大小

10: toArray()   集合转换数组

Collection接口有两个子接口:List、Set

(一)   List(列表)特点:List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。

取出LIst集合中元素的两种方式:

         get(int index):通过脚标获取元素。

         iterator():通过迭代方法获取迭代器对象。

 List接口中的常用类:

(1),Vector:线程安全,但速度慢,已被ArrayList替代。(不做赘述)

(2),ArrayList:线程不安全,但查询速度快。

              ArrayList 对象是长度可变的对象引用数组,类似于动态数组 ;

              继承 AbstractList 并实现 List 接口 ;

              随着元素的添加,元素的数目会增加,列表也会随着扩展;

              访问和遍历对象时,它提供更好的性能;

        ArrayList  类的构造方法详解: 

              ArrayList()  :创建一个空 Arraylist

              ArrayList(Collection c) :  根据给定集合的元素创建数组列表 

              ArrayList(int size)    :使用给定大小创建一个数组列表。向数组列表添加元素时,此大小自动增加

(3),LinkedList:相对于ArrayList来说,它是链表结构,增删速度快。

ArrayList和LinkedList的用处区别:

当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。

(二)  Set(集) :不可以存放重复元素,元素存取是无序的。

1,HashSet:用底层是哈希表结构,是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;

虽然线程不安全,但存取速度快。

       HashSet:通过equals方法和hashCode 方法来保证元素的唯一性。

2,TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。也是线程不安全的;

      通过compareTo或者compare 方法中的来保证元素的唯一性。

HashSet和TreeSet小区别:

当需要对数据只进行查询操作的时候,可以选择TreeSet;当需要进行存取操作的时候,尽量选择HashSet;

迭代:是取出集合中元素的一种方式;因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

迭代的两种用法for和while:

迭代器的注意事项:1,迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。2,迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。3,迭代器的next方法返回值类型是Object,所以要记得类型转换。集合框架中的泛型:本博客后面<JDK1.5新特性>里面有详细介绍!Map集合的特点:Map与Collection在集合框架中属并列存在,但是它存储的是键值对,里面的键相当于一个set集合;Map相对于Collection来说,它存储元素使用put方法;Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素;并且Map集合中键要保证是唯一的;Map集合中类的特点:1,HashMap:线程不安全,速度快,允许存放null 键,null值。  HashMap常用的构造方法有:     HashMap(): 创建一个具有默认容量和负载系数的空映射;   HashMap(int size): 创建一个具有指定大小的容量和默认负载系数的空映射;   HashMap(int size, float load): 创建一个具有指定的容量和指定的负载系数的空映射;    HashMap (Map map): 创建一个具有指定 map 映射的散列映射;2,TreeMap:对键进行排序,排序原理与TreeSet 相同。

 

相关代码例题笔记如下:

(1)---------------------------------------------------------------

/*

1,add方法的参数类型是Object.以便于接受任意类型的对象。

2,集合中存储的都是对象的引用(地址)

3,迭代器是集合取出元素的方式

*/

import java.util.*;

class  CollectionDemo

{

  public static void main(String[] args)

  {

      method_get();

  }

  public static void method_get()

  {

      ArrayList al1=new ArrayList();

      al1.add("java1");

      al1.add("java2");

      al1.add("java3");

      al1.add("java4");

      Iterator it=al1.iterator();//获取迭代器,用于取出集合中的元素

      while(it.hasNext())

      {

         sop(it.next());

      }

  }

  public static void method_2()

  {

      ArrayList al1=new ArrayList();

      al1.add("java1");

      al1.add("java2");

      al1.add("java3");

      al1.add("java4");

      ArrayList al2=new ArrayList();

      al2.add("java7");

      al2.add("java8");

      al2.add("java5");

      al2.add("java6");

     

      al1.retainAll(al2);

      sop("al1==="+al1);

      sop("al2==="+al2);

  }

 

  public static void base_method()

  {

      //创建一个集合容器,使用Collection接口的子类,AyyayList

      ArrayList al=new ArrayList();

     

      al.add("java1er");//add(Object obj);

      al.add("java2edygd");//添加元素

      al.add("java3fghghjj");

      al.add("java4234354545");

      sop(al);//打印集合

      sop("size="+al.size());//获取个数,即集合的长度

      al.remove("java2edygd");//删除元素

      sop("删除后的集合"+al);

      al.clear();//清空集合   

      sop("java1er是否存在"+al.contains("java1er"));//判断元素

      sop("集合是否为空"+al.isEmpty());

  }

  public static void sop(Object obj)

  {

      System.out.println(obj);

  }

}

(2)---------------------------------------------------------------

import java.util.*;

class CollectionsDemo

{

  public static void main(String[] args)

  {

      binarySearchDemo();

      sortDemo();

  }

  public static void binarySearchDemo()

  {

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

      list.add("oahskfjsjk");

      list.add("ahskfjs");

      list.add("jahskf");

      list.add("lahs");

      list.add("uaa");

      list.add("xza");

      list.add("xza");

      Collections.sort(list);//列表集合中的元素按自然顺序排序

      sop(list);

      int index=Collections.binarySearch(list,"uaa");

      sop("index="+index);

  }

  public static void sortDemo()

  {

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

      list.add("oahskfjsjk");

      list.add("ahskfjs");

      list.add("jahskf");

      list.add("lahs");

      list.add("uaa");

      list.add("xza");

      list.add("xza");

      sop(list);

      Collections.sort(list,new Strlencomparator());//列表结合中的元素按照字符串长度进行排序

      sop(list);

      Collections.sort(list);//列表集合中的元素按自然顺序排序

      sop(list);

      String max1=Collections.max(list);//列表集合中的最大元素字符串

      sop(max1);

      String max2=Collections.max(list,new Strlencomparator());//列表集合中的最长长度的字符串

      sop(max2);

  }

  public static void sop(Object obj)

  {

      System.out.println(obj);

  }

}

class Strlencomparator implements Comparator<String>

{

  public int compare(String s1,String s2)//定义字符串长度比较方法

  {

      if(s1.length()>s2.length())//字符串s1长度大于s2,返回正数

         return 1;

      if(s1.length()<s2.length())//字符串s1长度小于s2,返回负数

         return -1;

      return s1.compareTo(s2);//字符串s1长度等于s2,字符串s1、s2按照字符串比较方法排序

  }

}

(3)---------------------------------------------------------------

/*

集合变数组:

Collection接口中的toArray方法

*/

import java.util.*;

class  CollectionToArray

{

  public static void main(String[] args)

  {

      ArrayList<String> al=new ArrayList<String>();

      al.add("abc1");

      al.add("abc2");

      al.add("abc3");

/*

1,指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组

长度为集合的size

当指定类型的数组长度大于了集合的size,就不会创建数组,而是使用产地进来的数组

所以创建一个刚刚好的数组最优

2,为什么要将集合变数组

为了限定对元素的操作

*/

      String[] arr=al.toArray(new String[0]);

            

      System.out.println(Arrays.toString(arr));

  }

}

---------------------- android开发java培训、期待与您交流! ----------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值