【Java】集合总结之Collection和Map--List(1)

1.集合产生的原因

  解决数组存储数据时,因存入对象数量不确定,但数组长度一旦创建就不可变的局限,另一方面是对数据存储的补充和扩展。

2.集合的概念

  集合分为两大类:单列集合(Collection)与双列集合(Map)

  单列集合Collection:

    是单列集合的根接口,它有两个重要的子接口,分别是List和Set

    List:元素有序,元素可重复

    Set:元素无序,元素不可重复

    List的主要实现类有ArrayList和LinkedList,Set的主要实现类有HashSet和TreeSet

  双列集合Map:

    双列集合的根接口,用来存储具有键值映射关系的元素,每个元素都包含一对键和值

    Map接口的主要实现类有HashMap和TreeSet

3.集合相关的方法

  3.1单列集合Collection的方法

 

方法声明 功能描述
boolean add(Object o) 向集合中添加一个元素
boolean addAll(Collection c) 将指定Collection中的所有元素添加到该集合中
void clear() 删除该集合中的所有元素
boolean remove(Object o) 删除该集合中指定的元素
boolean removeAll(Collection c) 删除指定集合中的所有元素
boolean isEmpty() 判断该集合是否为空
boolean contains(Object o) 判断该集合中是否包含某个元素
boolean containsAll(Collection c) 判断该集合中是否包含指定集合中的所有元素
Iterator iterator() 返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合元素
int size() 获取该集合元素个数

 

 3.2List集合的相关方法

  List接口继承了Collection接口,拥有了Collection的相关方法,除此之外,它本身也增加了一些根据所有来操作元素的特有方法。

 

方法声明 功能描述
void add(int index,Object element) 将元素element插入在List集合的index处
boolean addAll(int index,Collection c) 将集合c所包含的所有元素插入到List集合的index处
Object get(int index) 返回集合索引为index的元素
boolean remove(int index) 删除index索引处的元素
Object set(int index, Object element) 将索引index处元素替换成element对象,并将替换后的元素返回
int indexOf(Object o) 返回对象o在List集合中出现的位置索引
int LastIndexOf(Object o) 返回对象o在List集合中最后一次出现的位置索引
List subList(int fromIndex,int toIndex) 返回从索引fromIndex(包含)到toIndex(不包含)处所有元素集合组成的子集合

 

4.List集合

  4.1ArrayList

    ArrayList是List的一个实现类,其内部封装了一个长度可变的数组对象,当存入元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元       素,因此ArrayList集合可以看作是一个长度可变的数组。

import java.util.ArrayList;

/*
 * 定义一个测试类
 * 测试ArrayList
 */
public class Test {

    public static void main(String[] args) {
      //定义ArrayList集合对象
      ArrayList<String> arrayList = new ArrayList<String>();
      //向集合中添加数据
      arrayList.add("name1");
      arrayList.add("name2");
      arrayList.add("name3");
      arrayList.add("name4");
      
      //获取存入数据的个数
      System.out.println(arrayList.size());
      //通过下标index获取对应元素,index从0开始,最大长度为seze-1
      System.out.println(arrayList.get(0));
      System.out.println(arrayList.get(1));
      System.out.println(arrayList.get(2));
    }
}

 

    ArrayList优缺点:

    因为ArrayList集合底层是使用数组来保存数据的,在增加和删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作,然而它         允许通过索引的方式来访问元素,所以使用ArrayList集合查找元素很便捷。

 

  4.2LinkedList集合

    LinkedList是List下的另一个实现类,它的底层是一个双向链表,通过引用的方式来记住它的前一个元素和后一个元素,增删操作的时候通过修改元素之间的引用关系即可实现目标,这样的操作也解决ArrayList增删操作效率低的局限性。

 

  4.2.1LinkedList中定义的方法
方法声明 功能描述
void add(int index,E element) 在此列表中指定位置插入指定的元素
void addFirst(Object o) 将指定元素插入此列表的开头
void addLast(Object o) 将指定元素添加到此列表的结尾
Object getFirst() 返回此列表的第一个元素
Object getLast() 返回此列表的最后一个元素
Object removeFirst() 移除并返回此列表的第一个元素
Object removeLast() 移除并返回此列表的最后一个元素

 

 

  使用LinkedList的方法

import java.util.LinkedList;

/*
 * 定义一个测试类
 * 测试LinkedList
 */
public class Test {

    public static void main(String[] args) {
        //定义LinkedList类型集合变量list
        LinkedList<String> link = new LinkedList<String>();
        //向集合变量中存入信息
        link.add("小白1");
        link.add("小白2");
        link.add("小白3");
        //取处并打印该集合元素
        System.out.println(link.toString());
        //向该集合指定位置插入元素
        link.add(2, "honghong");
        //向该集合第一个位置插入元素
        link.addFirst("HUHU");
        System.out.println(link);
        //取出该集合的第一个元素
        System.out.println(link.getFirst());
        //移除该集合中指定位置的元素
        link.remove(3);
        //移除该集合中第一个位置的元素
        link.removeFirst();
        System.out.println(link);
        

    }
}

 

5.集合的遍历

  5.1Iterator迭代器遍历

import java.util.ArrayList;
import java.util.Iterator;
/*
 * 定义一个测试类
 * 遍历集合
 */
public class Test {

    public static void main(String[] args) {
        //定义ArrayList类型集合变量list
        ArrayList<String> list = new ArrayList<String>();
        //向集合变量中存入信息
        list.add("小白1");
        list.add("小白2");
        list.add("小白3");
        list.add("小白4");

        //获取iterator对象
        Iterator it = list.iterator();
        //判断ArrayList集合是否存在下一个元素
        while(it.hasNext()){
            //取出ArrayList中的元素
            Object obj = it.next();
            System.out.println(obj);
        }     
    }
}

 

  5.2foreach循环遍历

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

  具体的实现代码:

import java.util.ArrayList;
/*
 * 定义一个测试类
 * 遍历集合
 */
public class Test {

    public static void main(String[] args) {
        //定义ArrayList类型集合变量list
        ArrayList<String> list = new ArrayList<String>();
        //向集合变量中存入信息
        list.add("小白1");
        list.add("小白2");
        list.add("小白3");
        list.add("小白4");
        
        //通过foreach语句实现数组的遍历
        for(String str:list){
            System.out.println(str);
        }
    }
}

  使用foreach遍历集合和数组时,只能访问数组中的元素,不能对其中的元素进行修改。

 

posted @ 2021-10-31 15:02  小墨儿  阅读(123)  评论(0编辑  收藏  举报