作为一个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

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

  1. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  2. Java 集合Collection与List的详解

    1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...

  3. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

  4. Java集合Collection基本方法

    jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Collection为List.Se ...

  5. JAVA集合--Collection接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     在概述里面也说过:Collection是jav ...

  6. 「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...

  7. java: 集合collection

    collection是集合层次结构中的根接口,一些集合允许重复元素,而其他集合不允许. 有些collection是有序的,而另一些是无序的. JDK不提供此接口的任何直接实现:它提供了更具体的子接口的 ...

  8. Java集合 Collection、Set、Map、泛型 简要笔记

    集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...

  9. Thinking in Java——集合(Collection)

    一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...

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

    1.集合简介和例子 Collection,集合.和数学定义中的集合类似,把很多元素放在一个容器中,方便我们存放结果/查找等操作. Collection集合实际上是很多形式集合的一个抽象. 例如十九大就 ...

随机推荐

  1. 【Linux系列】Centos 7安装 Nginx(三)

    目的 为了下面的Laravel部署,本篇开始安装Nignx服务器. 防火墙设置 在物理主机上查看nginx是否安装成功,需要开放虚拟机的80端口. 用cmder登录到虚拟机 firewall-cmd ...

  2. 以太网驱动的流程浅析(一)-Ifconfig主要流程【原创】

    以太网驱动的流程浅析(一)-Ifconfig主要流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...

  3. 利用tomcat搭建图片服务器

    今天来教大家如何使用 tomcat 来搭建一个图片的服务器 1.先将tomcat解压一份并改名 2.此时apache-tomcat-8.5.43-windows-x64-file为图片服务器 依次打开 ...

  4. AntDeploy一键发布netcore3.0Windows服务到远程服务器

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  5. JavaScript笔记四

    1.运算符 逻辑运算符 ! - 非运算可以对一个布尔值进行取反,true变false false边true - 当对非布尔值使用!时,会先将其转换为布尔值然后再取反 - 我们可以利用!来将其他的数据类 ...

  6. JavaScript笔记二

    1.表格 - 在网页中可以通过表格来表示一些格式化的数据 - 表格相关的标签 - <table> 用来创建一个表格 - <tr> 表示表格中的一行 - <th> 表 ...

  7. 献给那些想自建站搭建博客的新人们(实篇)wordpress

    实验材料 windows或者linux(因为我是大学操作系统学的是windows,后来服务器转向了linux,所以我将针对window和linux分别进行开展) xampp(最佳php5.6 在7.1 ...

  8. .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇

    .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...

  9. 5分钟上手自动化测试——Airtest+Poco快速上手

    版权声明:该文章为AirtestProject原创文章:允许转载,但转载必须注明“转载”并保留原链接 前言 本文档将演示使用`AirtestProject`专用的编辑器AirtestIDE,编写`Ai ...

  10. Win10 SQLServer 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    环境:Win10+SQLServer2014 场景:在SQLServer导入Excel时,选择Excel2007格式,提示:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供 ...