《java基础知识》Java集合(Collection)

作为一个Developer,Java集合类是我们在工作中运用最多的、最频繁的类。相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求;

Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。

Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。

今天主要讲:Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;

List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

继承关系图:

常用集合:ArrayList (数组)

特点

  • 容量不固定,随着容量的增加而动态扩容(阈值基本不会达到)
  • 有序集合(插入的顺序==输出的顺序)
  • 插入的元素可以为null
  • 效率更高(相对于LinkedList来说)
  • 线程不安全

list 常用方法

import java.util.ArrayList;
import java.util.List;

public class var {
    public static void main(String[] args){
        List<String> list = new ArrayList();
        List<String> list1 = new ArrayList();

        //list添加数据
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        System.out.println("add:"+list);

        //list的长度
        System.out.println("size:"+list.size());

        //集合转数组
        Object[] arr = list.toArray();
        System.out.println("toArray:"+arr);

        //判断集合是否为空
        if(!list.isEmpty()){
            System.out.println("集合list 不为空。");
        }

        //判断集合中是否包含某个元素
        if(list.contains("张三")){
            System.out.println("list包含张三。");
        }
        if(list.contains("李三")){
            //
        }else{
            System.out.println("list不包含李三。");
        }

        //复制list
        list1.addAll(list);
        System.out.println("addAll:"+list1);

        //list 删除数据
        list.remove(0); //按照角标删除
        list.remove("王五"); //按照内容删除。
        System.out.println("remove:"+list);

        //获取第2个数据数据
        System.out.println("get:"+list.get(1));

        //清空元素
        list.clear();
        System.out.println("clear:"+list);

        //判断集合是否为空
        if(list.isEmpty()){
            System.out.println("集合list 为空。");
        }
    }
}

运行结果:

list 中还有其他方法,见JDK的API。

常用集合:LinkedList(链表)

特点:插入,删除快。

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class var {
    public static void main(String[] agrs){
        List<String> linkedList = new LinkedList<String>();
        System.out.println("LinkedList初始容量:"+linkedList.size());

        //添加功能:
        linkedList.add("my");
        linkedList.add("name");
        linkedList.add("is");
        linkedList.add("jiaboyan");
        System.out.println("LinkedList当前容量:"+ linkedList.size());

        //修改功能:
        linkedList.set(0,"hello");
        linkedList.set(1,"world");
        System.out.println("LinkedList当前内容:"+ linkedList.toString());

        //获取功能:
        String element = linkedList.get(0);
        System.out.println(element);

        //遍历集合:(LinkedList实际的跌倒器是ListItr对象)
        Iterator<String> iterator =  linkedList.iterator();
        while(iterator.hasNext()){
            String next = iterator.next();
            System.out.println(next);
        }
        //for循环迭代集合:
        for(String str:linkedList){
            System.out.println(str);
        }

        //判断功能:
        boolean isEmpty = linkedList.isEmpty();
        boolean isContains = linkedList.contains("jiaboyan");

        //长度功能:
        int size = linkedList.size();

        //删除功能:
        linkedList.remove(0);
        linkedList.remove("jiaboyan");
        linkedList.clear();
        System.out.println("LinkedList当前容量:" + linkedList.size());
    }
}

运行结果:

ArrayList 和 LinkedList 对比

1. 插入数据:LinkedList 效率高。

2. 查询数据:ArrayList 效率非常高。

3. 空间利用率 :LinkedList 高。

不常用集合:Vector(队列)

特点:线程安全

import java.util.Arrays;
import java.util.Vector;

public class var {
    public static void main(String[] agrs){
        Vector vector = new Vector();

        //向该集合中添加元素
        vector.add("A");
        vector.add("B");
        vector.add("C");
        System.out.println(vector);

        //向指定的位置添加元素
        vector.add(1,"F");
        vector.add(3,"H");
        System.out.println(vector);

        //删除元素
        vector.remove("H");
        vector.remove(1);
        System.out.println(vector);

        //修改元素
        vector.set(1,"G");
        System.out.println(vector);

        //查询元素
        System.out.println("get: "+vector.get(1));

        //判断当前集合是否为空
        boolean b = vector.isEmpty();
        System.out.println(b);

        //返回集合vector中元素的个数
        int i = vector.size();
        System.out.println("size: "+i);

        //将集合对象转为Object的数组
        Object[] array = vector.toArray();
        System.out.println(Arrays.toString(array));
    }
}

运行结果:

因为vector 线程安全,导致效率低,所以使用较少。

不常用集合:Stack (堆栈)

特点:先进后出

import java.util.Stack;

public class var {
    public static void main(String[] agrs){
        Stack stack = new Stack();

        //提供了push,写入元素
        stack.push("A");
        stack.push("B");
        stack.push("C");

        //提供了push,写入一个元素
        stack.push("D");
        System.out.println(stack);

        //pop 拉取一个元素,并移除
        System.out.println(stack.pop());
        System.out.println(stack);

        //拉取一个元素,不移除
        System.out.println(stack.peek());
        System.out.println(stack);

        // 查找search
        System.out.println(stack.search("B"));
    }
}

运行结果:

常用集合:HashSet(哈希)

特点:元素不会重复。

import java.util.HashSet;
import java.util.Set;

public class var {
    public static void main(String[] agrs){
        Set set= new HashSet();
        set.add("1");
        set.add("1");
        set.add("2");
        set.add("3");
        set.add("4");
        set.add("5");
        set.add("5");
        System.out.println(set);
    }
}

运行结果:

常用集合:TreeSet(二叉树)

特点:TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列

public class Person {

    public String name;    //姓名
    public Integer age;    //年龄

    public Person(String name,Integer age) {
        this.name=name;
        this.age=age;
    }
}
import demo.design.strategy.imp.Person;
import java.util.TreeSet;

public class var {
    public static void main(String[] agrs){
        TreeSet<Person> ts = new TreeSet<>();
        ts.add(new Person("张三", 23));
        ts.add(new Person("李四", 13));
        ts.add(new Person("周七", 13));
        ts.add(new Person("王五", 43));
        ts.add(new Person("赵六", 33));
        System.out.println(ts);
    }
}

运行结果:

因为TreeSet需要排序,所以需要指定类的排序逻辑

public class Person implements Comparable<Person>{

    public String name;    //姓名
    public Integer age;    //年龄

    public Person(String name,Integer age) {
        this.name=name;
        this.age=age;
    }

    /**
     * 加上比较方法,让TreeSet 可以根据这个排序
     * @param o
     * @return
     */
    public int compareTo(Person o){
        if(o.age > this.age){
            return 1;
        }else if(o.age > this.age){
            return -1;
        }else {
            return 0;
        }
    }
}
import java.util.Iterator;
import java.util.TreeSet;

public class var {
    public static void main(String[] agrs){
        TreeSet<Person> ts = new TreeSet<>();
        ts.add(new Person("张三", 23));
        ts.add(new Person("李四", 13));
        ts.add(new Person("周七", 13));
        ts.add(new Person("王五", 43));
        ts.add(new Person("赵六", 33));

        //使用迭代方式获取元素
        Iterator<Person> it = ts.iterator();
        while (it.hasNext()){
            Person person= it.next();
            System.out.println("姓名:"+person.name+"年龄:"+person.age);
        }
    }
}

运行结果:

能够熟料掌握以上集合,在今后的工作中已经够用,需要继续了解,可以阅读JDK API文档。

参考:https://www.jianshu.com/p/63b01b6379fb

https://www.jianshu.com/p/a2236f562ead

https://www.cnblogs.com/yzssoft/p/7127894.html

/** * 加上比较方法,让TreeSet 可以根据这个排序 * @param o* @return*/

原文地址:https://www.cnblogs.com/jssj/p/11456257.html

时间: 2024-08-02 22:52:30

《java基础知识》Java集合(Collection)的相关文章

Java集合 - Collection

Ref:http://blog.csdn.net/liulin_good/article/details/6213815  http://www.cnblogs.com/averey/p/4306166.html 一.java.util.Iterator<E>接口 迭代器 1 package java.util; 2 3 public interface Iterator<E>{ 4 // Return true iteration has more elements 5 bool

java集合 - Collection - List - Set - Map - Iterator 学习笔记

1.Collection接口 集合可以理解为一个动态的对象数组,两层含义: 1).动态:集合中的对象可以任意扩充和删减: 2).集合中可以存放任意对象. 集合的性能比数组高,而且更容易进行数据的扩展和修改. Collection的常用子接口:List.Set.Queue. 2.List接口 List集合可以存放任意对象,而且集合中对象可以重复. List的常用实现类:ArrayList.Vector. ArrayList与Vector的比较: 性能方面:ArrayList采用异步处理方式,性能高

java集合Collection接口

collection集合 Map集合 Collection接口 Collection接口是List.Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集Collection提供了大量添加.删除.访问的方法来访问集合元素.主要的方法如下:

java集合 Collection,Map

大致分为Set,List,Queue,Map四种体系 Set代表无序不可重复的集合,通过元素本身访问 List代表有序可重复的集合,通过元素索引访问 Map代表有映射关系的集合,通过key访问 Queue代表一种队列集合的实现 Collection接口是List,Set,Queue的父接口,定义了如下操作集合方法:add,addAll,clear,contains,containsAll,isEmpty,iterator,remove,removeAll,retainAll,insize,toA

Java 集合Collection——初学者参考,高手慎入(未完待续)

1.集合简介和例子 Collection,集合.和数学定义中的集合类似,把很多元素放在一个容器中,方便我们存放结果/查找等操作. Collection集合实际上是很多形式集合的一个抽象. 例如十九大就要召开,那么到人民大会堂与会的人就是一个集合 ,这个集合里装载了许多元素,每个元素就是一个人大代表. 再比如北京的全聚德烤鸭非常出名,每天都有人排队购买,这个队也是一个集合. 上面这两个例子就展示了两个不同的集合,人大代表的集合其实就是一个简单的聚合,把若干元素集中在一起.第二个例子,排队就具有比较

Java集合—Collection篇

说到Collection集合不得不提的就是数组,Java中的数组为我们存储大量的数据提供了很大的方便,但 是数组也有很多缺点,不够灵活 1.数组被定义后长度就是固定的,但是实际开发中数据长度常常是不固定的 2.数组中只能存放同种类型的数据,但是要在一个数组中存放多种数据类型的数据就不行了 为了解决数组的弊端,集合就应声而出 一.Collection集合体系简介 集合是用来存放多个元素,由于底层数据结构的不同,Java就提供了多种集合类,而这些集合类都有共 性的东西,然后不断向上抽取这些公性,便形

Thinking in Java——集合(Collection)

一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ boolean add(E element);//向集合中添加元素,E代表泛型 Iterator<E> iterator();//返回实现了Iterator接口的对象 } 关于:Iterator之后讲解. (二).实现了Collection的子类: List:按照顺序插入保存元素.            

java集合Collection的List ArrayList LinkedList 区别

概述 1.List的特点:线性顺序存储元素.元素可重复.可以存放null 2.ArrayList.LinkedList 一.List特点 如此图所示,List的存储形式是一个线性的结构,所以它可以重复,也可以存null.当然具体子类是怎么实现的,各有各个的形式. 二.关于List的方法 大部分这里都不会像介绍Collection接口那样逐一解释了.只讲部分使用时比较特殊点的. List<E> subList(int fromIndex, int toIndex) 待续....

【转】Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例3 fail-fast解决办法4 fail-fast原理5 解决fail-fast的原理 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308762.html 1 fail-fast简介 fail-fast 机制是java集合(Collection)中

Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例3 fail-fast解决办法4 fail-fast原理5 解决fail-fast的原理 转载:http://www.cnblogs.com/skywang12345/p/3308762.html 1 fail-fast简介 fail-fast 机制是java集合(Collection)中的一种错误