黑马程序员---集合 (好模糊)

时间:2023-02-18 09:47:54
---------------------- <a href="http://www.itheima.com"target="blank">Jsp.java+Android开发</a>、<a href="http://www.itheima.com"target="blank">Jsp.java+Android开发 </a>、期待与您交流! ----------------------

集合概念:

Collection层次结构的根接口。Collection表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来collection并在需要最大普遍性的地方操作这些 collection。
此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则指定这些方法抛出 UnsupportedOperationException。如果是这样,那么在调用对该 collection 无效时,这些方法可能,但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该 collection 调用 addAll(Collection)方法时,可能但并不一定抛出异常。
一些 collection 实现对它们可能包含的元素有所限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检查的异常,通常是 NullPointerException 或ClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回 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了。



相关代码例题笔记如下:

(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));

  }

}


---------------------- <a href="http://www.itheima.com"target="blank">Jsp.java+Android开发</a>、<a href="http://www.itheima.com"target="blank">Jsp.java+Android开发培训</a>、期待与您交流! ----------------------