zoukankan      html  css  js  c++  java
  • Java集合-Collection常用方法

    集合的学习,需要知道怎么使用集合,往里面存储数据,会遍历集合,把数据取出来,最后需要掌握各种集合的特点。集合和数组有什么区别呢?两者都可以存储数据,其中数组中可以存储基本数据类型也可以存储对象,但集合只能存储对象,所有的集合,都是继承自Collection接口,其为所有集合的顶层接口。

    Collection接口

    Collection接口,定义所有单例集合共性的方法,下面有两个子接口,一个是List接口,一个是Set接口。

    List接口

    List接口,其下面主要实现类有Vector集合,ArrayList集合,LinkedList集合,底层实现方式有数组,也有链表,它有如下特点:
    (1)有序的集合,即存储和取出元素的顺序相同
    (2)允许存储重复的元素
    (3)有索引,可以使用普通的for循环遍历

    Set接口

    Set接口,其下面主要的实现类有TreeSet集合,HashSet集合,还有LinkedHashSet集合,前两者是无序的集合,最后一个是有序的集合,它有如下特点:
    (1)不允许存储重复的元素
    (2)没有索引,不能使用普通的for循环遍历

    Collection接口中常用方法

    collection集合中共性的方法,可以在java.util.Collection中查看,一共有如下7个,针对不同的实现类,都可以使用这7个方法。
    1 public boolean add(E e):添加一个元素
    2 public void clear():清空集合中所有的元素
    3 public boolean remove(E e):移除集合中指定的元素
    4 public boolean contains(E e):检查集合中是否包含指定的对象
    5 public boolean isEmpty():判断集合是否为空
    6 public void size():判断集合中元素的个数
    7 public Object[] toArray():把集合元素存储到数组中

     1 package CollectionTest;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 
     6 /**
     7  * collection集合中共性的方法,可以在java.util.Collection中查看,一共有如下7个
     8  * 1 public boolean add(E e):添加一个元素
     9  * 2 public void clear():清空集合中所有的元素
    10  * 3 public boolean remove(E e):移除集合中指定的元素
    11  * 4 public boolean contains(E e):检查集合中是否包含指定的对象
    12  * 5 public boolean isEmpty():判断集合是否为空
    13  * 6 public void size():判断集合中元素的个数
    14  * 7 public Object[] toArray():把集合元素存储到数组中
    15  */
    16 public class CollectionMethod {
    17 
    18     public static void main(String[] args) {
    19         //定义一个集合,使用父类的接口指向子类的对象
    20         Collection<String> col = new ArrayList<String>();//使用ArrayList实现类,初始化的容量为10
    21         System.out.println(col);// [] 说明ArrayList重写了toString方法
    22 
    23         /**
    24          * public boolean add(E e):添加一个元素
    25          */
    26         boolean r1 = col.add("Messi");
    27         System.out.println(r1); //true
    28         System.out.println(col); //[Messi]
    29 
    30         //多添加几个
    31         col.add("Ronald");
    32         col.add("Herry");
    33         col.add("beckham");
    34         System.out.println(col);//[Messi, Ronald, Herry, beckham]
    35 
    36         /**
    37          * public boolean remove(E e):移除集合中指定的元素
    38          */
    39         //移除beckham
    40         boolean r2 = col.remove("beckham");
    41         System.out.println(r2); //true
    42         System.out.println(col); //[Messi, Ronald, Herry]
    43 
    44         /**
    45          * public boolean contains(E e):检查集合中是否包含指定的对象
    46          */
    47 
    48         //检查集合中是否包含messi
    49         boolean r3 = col.contains("Messi");
    50         System.out.println(r3); //true
    51         System.out.println(col); //[Messi, Ronald, Herry]
    52 
    53         /**
    54          * public boolean isEmpty():判断集合是否为空
    55          */
    56         //如果为空则为true,否则为false
    57         boolean r4 = col.isEmpty();
    58         System.out.println(r4); //false
    59 
    60         /**
    61          * public void size():判断集合中元素的个数
    62          */
    63 
    64         int count=col.size();
    65         System.out.println(count); //3
    66 
    67         /**
    68          * public Object[] toArray():把集合元素存储到数组
    69          */
    70         Object[] arr=col.toArray();
    71         for (int i = 0; i < arr.length; i++) {
    72             System.out.println(arr[i]);
    73         }
    74 
    75         /**
    76          * public void clear():清空集合中所有的元素
    77          */
    78         col.clear();//使用后清空所有集合对象
    79         System.out.println(col);
    80 
    81     }
    82 }

    控制台输出情况:

    迭代器Iterator使用

    迭代器iterator的使用,来自java.util.iterator,作用是为了各式各样的集合,开发了一个统一的取出集合元素的接口,其主要有两种常用使用方法
    1 boolean hasNext():如果集合中还有下一个元素,就返回true,否则返回false
    2 E next():取出集合中的下一个元素
    使用迭代器需要使用Collection接口的iterator()方法,其返回的就是一个迭代器iterator实现类对象,有了实现类对象才能使用里面的方法
    使用迭代器的基本步骤:
    1 先使用Collection集合的iterator()方法获取iterator实现类对象,并使用一个iterator接口来接收,接口指向对象,为多态的应用
    2 使用迭代器的hasNext()方法判断集合中还有没有下一个元素
    3 使用迭代器的next()方法取出集合中下一个元素

     1 package CollectionTest;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 import java.util.Iterator;
     6 
     7 /**
     8  * 迭代器iterator的使用,来自java.util.iterator,作用是为了各式各样的集合,开发了一个统一的取出集合元素的接口,其主要有两种常用使用方法
     9  * 1 boolean hasNext():如果集合中还有下一个元素,就返回true,否则返回false
    10  * 2 E next():取出集合中的下一个元素
    11  * 使用迭代器需要使用Collection接口的iterator()方法,其返回的就是一个迭代器iterator实现类对象,有了实现类对象才能使用里面的方法
    12  * 使用迭代器的基本步骤:
    13  * 1 先使用Collection集合的iterator()方法获取iterator实现类对象,并使用一个iterator接口来接收,接口指向对象,多态的应用
    14  * 2 使用迭代器的hasNext()方法判断集合中还有没有下一个元素
    15  * 3 使用迭代器的next()方法取出集合中下一个元素
    16  */
    17 public class IteratorTest {
    18 
    19     public static void main(String[] args) {
    20         //初始化集合,存入集合元素
    21         Collection<String> col = new ArrayList<String>();
    22         col.add("Messi");
    23         col.add("Ronald");
    24         col.add("Herry");
    25         col.add("Beckham");
    26         col.add("clyang");
    27         System.out.println(col);
    28 
    29         //获取迭代器,迭代器泛型就是集合的泛型
    30         Iterator<String> it = col.iterator();//返回集合元素顺序随机
    31 
    32         //使用步骤,得到一个集合对象
    33         boolean r = it.hasNext();
    34         String str = it.next();
    35         System.out.println(r); //true
    36         System.out.println(str); //Messi
    37 
    38         //可以使用循环遍历获取迭代器中每一个对象
    39         while (it.hasNext()) {
    40             System.out.println(it.next());
    41         }
    42 
    43         //遍历完后,再次从迭代器取元素
    44         boolean r1 = it.hasNext();
    45         System.out.println(r1); //false
    46         /*String str1 = it.next(); //抛出异常,NoSuchElementException
    47         System.out.println(str1);*/
    48 
    49         System.out.println("---使用for循环遍历迭代器中元素---");
    50 
    51         //使用for循环遍历迭代器
    52         for (Iterator<String> it1 = col.iterator(); it1.hasNext(); ) {
    53             System.out.println(it1.next());
    54         }
    55 
    56         /**
    57          * 使用迭代器的原理,看自己博客记录
    58          * 1 使用集合iterator()方法获取迭代器对象后,会将地址指向ArrayList底层数组的-1索引位置
    59          * 2 hasNext方法会检查数组索引位置是否有元素
    60          * 3 如果索引位置有元素,next方法会取出元素,并将地址往后面移动一位
    61          */
    62 
    63     }
    64 }

    其中上面例子使用的集合为ArrayList,其底层采用数组实现,获取迭代器后会直接将地址指向数组前面一位索引为-1,如果是其他的数组实现,如LinkedList,其底层是通过链表来实现,链表储存的是一个个数据+地址的集合,通过上一个地址指向下一个地址,那获取迭代器后地址指向哪里?指向第一个数据之前的位置,参考博客。

    控制台输出情况:

    增强型for循环使用

    增强型for循环的使用,Collection接口继承父接口Iterable,这个父接口的作用就是允许对象成为for-each循环的目标,增强型for循环的目的主要是遍历集合或数组元素。
    使用格式:
    for(集合或数组数据类型 变量名:集合或数组名){
       方法体
     }

     1 package CollectionTest;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 
     6 /**
     7  * 增强型for循环的使用,Collection接口继承父接口Iterable,这个父接口的作用就是允许对象成为for-each循环的目标
     8  * 增强型for循环的目的主要是遍历集合或数组元素
     9  * 格式:
    10  * for(集合或数组数据类型 变量名:集合或数组名){
    11  *     方法体
    12  * }
    13  */
    14 public class ForEachTest {
    15 
    16     public static void main(String[] args) {
    17         //使用增强型for循环遍历数组
    18         loopArray();
    19         //使用增强型for循环遍历集合
    20         loopCollection();
    21     }
    22 
    23     public static void loopArray(){
    24         int[] arr=new int[]{1,3,5,7,9};
    25         for(int i:arr){
    26             System.out.println(i);
    27         }
    28     }
    29 
    30     public static void loopCollection(){
    31         Collection<String> col=new ArrayList<String>();
    32         col.add("you");
    33         col.add("can");
    34         col.add("marry?");
    35         col.add("maybe 40 years old");
    36         for(String str:col){
    37             System.out.println(str);
    38         }
    39     }
    40 }

    控制台输出情况:

    以上为集合Collection相关知识点,记录一下以备后面使用。

    参考博客:

    https://www.cnblogs.com/qducn/p/6228276.html

  • 相关阅读:
    try catch 和\或 finally 的用法
    postgresql与oracle对比
    今天遇到个let: not found
    NTLM相关
    【搜藏】net use命令拓展
    【shell进阶】字符串操作
    【网摘】网上邻居用户密码
    测试导航
    关系代数合并数据 left join
    真正的程序员
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11028365.html
Copyright © 2011-2022 走看看