微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java基础案例教程——第6章集合(上)

1.集合概述

集合类都位于java.util 包 中,使用时必须导包。

集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,其特点如下:

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。 List的特点是元素有序,可重复,List接口的主要实现类有ArrayList和LinkedList。 Set的特点是无序且不可重复,Set接口的主要实现类有HashSet和TreeSet。

Map:双列集合类的根接口,用于存储具有键(Key),值(Value)映射关系的元素,每个元素都包含一对键值,其中键值不可重复且每个键最多只能映射到一个值,在使用Map集合时可以通过指定的Key找到对应的Value。

2.Collection接口

Collection是所有单列集合的父接口,它定义了单列集合(List和Set)通用的一些方法,如下

 3.List接口

 1)List接口简介 

List接口继承自Collection接口,是单列集合的员工重要分支。List集合允许出现重复的元素,所有的元素是以一个线性方式进行存储的,在程序中可以通过索引访问List集合中的指定元素。

List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,还增加了一些根据元素索引操作集合的特有方法。如下:

 2)ArrayList集合(与LinkedList相比查询高效)

ArrayList是List接口的一个实现类,它是程序中最常见的一种集合,可以将它看作一个长度可变的数组。

//创建ArrayList集合
ArrayList list=new ArrayLiat();
//向集合中添加元素
list.add("abc");    //abc可以替换
list.add("abc");
list.add("abc");
//获取集合中元素的个数
System.out.println("集合的长度"+list.size());
//取出并打印最大位置的元素
System.out.println("第二个元素是"+list.get());

3)LinkedList集合

LinkedList集合内部维护了一个双向循环链表,链表中的每一个元素都设有引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。因为这样的存储结构,所有LinkedList集合进行元素的增加删除操作时效率很高。

针对元素的添加删除操作,LinkedList集合定义了一些特有的方法,如下:

 

//创建LinkedList集合
LinkedList link=new LinkedList();
//添加元素
link.add("abc");    //abc可以替换
list.add("abc");
list.add("abc");
//取出并打印该集合中的元素
System.out.println(link.toString());
//向该集合中指定位置插入元素
link.add(m,"xxxxx");   // m 是第几个位置,xxxxx是插入的元素
//在第一个位置插入元素
link.addFirst("XXXXX");   //XXXXX是插入的元素
//打印
System.out.println(link);
//取出该集合中的第一个元素
System.out.println(link.getFirst());
//删除该集合中指定位置的元素
link.remove(n);     //n是第几个位置
//删除集合中的第一个元素
link.remove();
//打印
System.out.println(link);

4)Iterator接口

Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也称为迭代器。

//创建ArrayList集合
ArrayList list=new ArrayList();
//向该集合中添加元素
list.add("abc");     //abc可以替换
list.add("abc");
list.add("abc");
//获取Iterator对象
Iterator it=list.iterator();
//判断ArrayList集合中是否存在下一个元素
while(it.hasNext()){
//取出ArrayList集合中的元素
      Object obj=it.next();
      System.out.println(obj);
}

注意:通过迭代器获取ArrayList集合中的元素时,这些元素的类型都是Object类型,如果想获取到特定类型的元素,则需要对数据类型进行强制转换。

注意:在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法删除元素之后,继续使用迭代器遍历元素,会出现异常。

如下:

//创建ArrayList集合
ArrayList list=new ArrayList();
list.add("abc");     //abc可以替换
list.add("aaa");
list.add("bbb");
//获得Iterator对象
Iterator it=list.iterator();
//判断该集合是否有下一个元素
While(it.hasNext()){
//获取该集合中的元素
      Object obj=it.next();
//判断该集合中的元素是否为aaa
      if("aaa".equals(obj)){
//删除该集合中的元素
         list.remove(obj);
}
}
System.out.println(list);

解决方式如下

第一种方式:跳出循环不在迭代,如下

if("aaa".equals(obj)){
   list.remove();
   break;
}

第二种方式:如果需要在集合的迭代期间对集合中的元素进行删除,可以使用迭代器本身的删除方法,如下:

if("aaa".equals(obj)){
   it.remove();
}

5)foreach循环

foreach循环是一种更加简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素,具体格式如下:

for(容器中元素类型 临时变量 :容器变量){
    执行语句;
}

演示如下:

//创建ArrayList集合
ArrayList list=new ArrayList();
//向ArrayList集合中添加字符串元素
list.add("aaa");    //aaa可以替换
list.add("aaa");
list.add("aaa");
//使用foreach循环遍历ArrayList对象
for(Object obj:list){
//取出并打印ArrayList集合中的元素
    System.out.println(obj);
}

注意:foreach循环并不能修改数组中元素的值

原文地址:https://www.jb51.cc/wenti/3282970.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐