你不知道的Java学习笔记21-- 集合(Collection)

一、常量、数组、集合
常量:数据类型固定,存放个数只能有一个。
数组:数组类型固定,大小限定,存放个数可以是多个。
集合:集合相当于一个容器,用来存放一组对象的。存储数据量不限制,可以根据实际的需要进行扩展,是弹性存储空间。能存储任何类型的对象,存储数据的包容性更强。

二、Java中集合框架层次结构

这里写图片描述

1、Colection
相当于数组,以值(value)进行存储。

2、Map
以键值(key-value)对进行存储,是映射存储。

3、Iterator
迭代器,相当于用for进行循环访问。

三、Colection接口
(一)Colention概念
这里写图片描述
1、一个Colection中可以放不同类型的数据。
2、一组称为元素的对象。
3、Colection是Set接口和List接口的父类。
4、是否有特定的顺序以及是否允许重复,取决于它的实现
5、Colection是抽象方法,不能直接调用,要用Colention都要用其实现类去干事情。
(1)Set:无序集合,不允许重复。
无序集合:数据放入的顺序和实际存储的数据位置不完全一致,不保证数据恒久不变,即使是相同的代码,在执行一次其存放的顺序又改变。
不允许重复:不包含两个内容相等的对象,即e1.equals(e2);“==”相等一定equals相等;最多只包含一个null元素。
HashSet–实现类
(2)List:有序集合,允许重复。
ArrayList–实现类、LinkedList–实现类

(二)、Collection常用方法
1、增加数据

boolean add(Object ) :在集合中加入一个对象,成功时返回true

2、删除数据

boolean remove(Object ):从集合中删除对象

3、查询数据

int size( ):求集合中有几个元素
boolean isEmpty( ):判断集合是否为空
boolean contains(Object ):判断集合是否包含该对象
Iterator iterator( ):迭代访问。相当于for循环的作用

(三)、Set接口
1、HashSet–HashSet的特征在于其内部对象的散列存取,即采用哈希技术。
2、TreeSet–TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的。只接收字符串形式的输入。
3、TreeSet支持简单的字母、数字排序,但是中文就不行啦。
4、Set接口是通过HashSet实现类、TreeSet实现类去干事情。

import java.util.HashSet;
import java.util.TreeSet;
/*
 * 验证Set的无序集合、不允许重复
 */
public class SetTest {
    public static void main(String[] args) {

    /*
    * HashSet
    * 元素是无序的,不允许重复的
    * 按照HashCode()来存储
    */
    //创建HashSet实例化对象
    HashSet s=new HashSet<String>();
    //利用add()方法进行赋值
    s.add(10);
    s.add(20);
    s.add(20);
    s.add(4.0f);
    s.add("HelloWorld");
    s.add("HelloWorld");
    //打印输出
    System.out.println(s);


    /*
     * TreeSet
     * 元素是无序的,不允许重复
     * 按照排序树来存储,且要求个元素间的类型是可比较的
     */
    TreeSet t=new TreeSet();
    t.add("10");
    t.add("20");
    t.add("20");
    t.add("4.0");
    t.add("HelloWorld");
    t.add("HelloWorld");
    System.out.println(t);
    }

}

这里写图片描述

(四)、List接口
1、List接口是用来包含一组有序有重复的对象的。
2、List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。
3、List有两种主要的集合实现类:

(1)ArrayList
(2)LinkedList

ArrayList
(一)、ArrayList概念
1、ArrayList是线性顺序存储的,是一种线性表。
2、ArrayList的特性和数组很接近,数组大小是不变的。而ArrayList的大小是可以动态改变的。

(二)、ArrayList的构造方法

 // 常用的
1、ArrayList 变量名=new ArrayList();
//直接指定容量的大小,开发中一般不会这样做,这样做跟数组没有任何区别。
2、ArrayList  变量名=new ArrayList(int capacity);
//把一个集合作为一个元素
3、ArrayList 变量名=new ArrayList(Collection c);

(三)、ArrayList的常用方法
1、增加数据

void add(Object element ):在列表中添加一个元素

void add(int index,Object element ) :在列表中的index位置添加一个元素

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    //在列表中的index为1的位置添加一个元素
    arr.add(1, 60);
    System.out.println(arr);
    }
}

这里写图片描述

2、删除数据

Object remove(int index ):移除列表中指定位置的元素

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    //在列表中的index为1的位置添加一个元素
    arr.add(1, 60);
    //移除列表中index为1的元素
    arr.remove(1);
    System.out.println(arr);
    }
}

这里写图片描述

3、查询数据

(1)Object get(int index):返回列表中指定位置的元素

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    //在列表中的index为1的位置添加一个元素
    arr.add(1, 60);
    System.out.println(arr);
    //返回列表中index为0位置的元素
    System.out.println(arr.get(0));
    }
}

这里写图片描述

(2)int indexOf(Object o):在列表中查询元素的索引值,如果不存在返回-1

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    //在列表中的index为1的位置添加一个元素
    arr.add(1, 60);
    System.out.println(arr);
    //在list中查询元素的索引值,如果不存在,返回-1
    System.out.println(arr.indexOf(40));
    System.out.println(arr.indexOf(60));
    }
}

这里写图片描述

(3)int lastIndexOf(Object o)
List中如果存在多个重复元素,indexOf()方法返回第一个匹配元素的index。lastIndexOf( )是返回最后一个匹配元素的index。

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    arr.add(40);
    System.out.println(arr);
    //indexOf()方法返回第一个匹配元素的index
    System.out.println(arr.indexOf(40));
    //LastIndexOf()方法返回匹配元素的最后一个index
    System.out.println(arr.lastIndexOf(40));
    }
}

这里写图片描述

(4)ListIterator listIterator()
返回列表中元素的列表迭代器。

import java.util.ArrayList;
/*
 *增加数据 boolean add(Object)
 */
public class SetTest {
    public static void main(String[] args) {
    ArrayList arr=new ArrayList();
    //在列表中添加一个元素
    arr.add(40);
    arr.add(80);
    arr.add(40);
    System.out.println(arr);
    //利用迭代器输出列表中的元素
    System.out.println(arr.listIterator());
    }
}

这里写图片描述

LinkedList
(一)概念
1、likedList是数据结构中链表的java实现。
2、相对于List来说,LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的Stack(栈)
queue(对列)等。
3、LinkedList与ArrayList的唯一区别就是LinkedList对首尾操作比较方便,别的和ArrayList无差别。

(二)构造方法
//常用
LinkedList 变量名=new LinkedList();

//把一个集合作为一个元素
LinkedList 变量名=new LinkedList(Collention c);

(三)常用方法
1、将给定元素插入此列表的开头/结尾

void addFirst(Object o) //将给定元素插入此列表的开头

void addLast(Object o) //将给定元素插入此列表的结尾处

import java.util.LinkedList;
/*
*void addFirst(Object o) 将给定元素插入此列表的开头
*void addLast(Object o) 将给定元素插入此列表的结尾处
*
*/

public class TestLinkedList {
    public static void main(String[] args) {
    //创建对象
    LinkedList link=new LinkedList();
    //添加元素
    link.add(40);
    link.add(80);
    link.add(40);
    //打印所有元素
    System.out.println("打印所有元素:"+link);
    //将“10”元素插到link列表的开头
    link.addFirst(10);
    //将“200”元素插到Link列表的结尾
    link.addLast(200);
    //打印更新后的所有元素
    System.out.println("打印更新后的所有元素:"+link);
    }
}

这里写图片描述

2、返回次列表的第一个元素/最后一个元素

Object getFirst()//返回次列表的第一个元素

Object getLast() //返回次列表的最后一个元素

import java.util.LinkedList;
/*
 *Object getFirst()//返回次列表的第一个元素
 *Object  getLast() //返回次列表的最后一个元素
 */
public class TestLinkedList {
    public static void main(String[] args) {
    //创建对象
    LinkedList link=new LinkedList();
    //添加元素
    link.add(40);
    link.add(80);
    link.add(120);
    //打印所有元素
        System.out.println("打印所有元素:"+link);
    //返回此列表的第一个元素,并通过println()方法打印出来
    System.out.println("返回此列表的第一个元素:"+link.getFirst());
    //返回次列表的最后一个元素,并通过println()方法打印出来
    System.out.println("返回次列表的最后一个元素:"+link.getLast());
    }
}

这里写图片描述

3、移除并返回此列表的第一个元素/最后一个元素

Object removeFirst()移除并返回此列表的第一个元素

Object removeLast()移除并返回次列表的最后一个元素

import java.util.LinkedList;
/*
 *Object getFirst()//返回次列表的第一个元素
 *Object  getLast() //返回次列表的最后一个元素
 */
public class TestLinkedList {
    public static void main(String[] args) {
    //创建对象
    LinkedList link=new LinkedList();
    //添加元素
    link.add(40);
    link.add(80);
    link.add(70);
    link.add(120);
    //打印所有元素
    System.out.println("打印所有元素:"+link);
    //移除并返回次列表的第一个元素
    System.out.println("移除并返回次列表的第一个元素:"+link.removeFirst());
    //移除并返回次列表的最后一个元素
    System.out.println("移除并返回次列表的最后一个元素:"+link.removeLast());
    //打印移除后的列表所有元素
    System.out.println("打印移除后的列表所有元素:"+link);

    }
}

这里写图片描述

ArrayList与linkList的比较

1、存储结构
ArrayList是线性顺序存储;
LinkList对象间彼此串连起来的一个链表。

2、操作性能
ArrayList适合随机查询的场合;
LinkList元素的插入和删除操作性高。

3、从功能上,Linkling要多些

猜你喜欢

转载自blog.csdn.net/lin434406218/article/details/52728728