《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
《Java基础知识》Java集合(Collection)的更多相关文章
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- Java 集合Collection与List的详解
1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- Java集合Collection基本方法
jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Collection为List.Se ...
- JAVA集合--Collection接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 在概述里面也说过:Collection是jav ...
- 「 深入浅出 」java集合Collection和Map
本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...
- java: 集合collection
collection是集合层次结构中的根接口,一些集合允许重复元素,而其他集合不允许. 有些collection是有序的,而另一些是无序的. JDK不提供此接口的任何直接实现:它提供了更具体的子接口的 ...
- Java集合 Collection、Set、Map、泛型 简要笔记
集合 什么是集合 概念 对象的容器,实现了对对象常用的操作 和数组的区别 数组长度固定,集合长度不固定 数组可以存储基本类型和引用类型,集合只能存储引用类型 位置 java.util.*; Colle ...
- Thinking in Java——集合(Collection)
一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...
- Java 集合Collection——初学者参考,高手慎入(未完待续)
1.集合简介和例子 Collection,集合.和数学定义中的集合类似,把很多元素放在一个容器中,方便我们存放结果/查找等操作. Collection集合实际上是很多形式集合的一个抽象. 例如十九大就 ...
随机推荐
- springboot+logback日志输出企业实践(下)
目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...
- linux history(命令历史)
1.bash中默认命令记忆可达1000个.这些命令保存在主文件夹内的.bash_history中. 2.~/.bash_history:记录的是前一次登录以前所执行过的命令.至于本次登录的命令暂时存储 ...
- Leetcode 1020 飞地的数量
地址 https://leetcode-cn.com/problems/number-of-enclaves/ 给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地). 移动是指在陆地上从 ...
- [从今天开始修炼数据结构]串、KMP模式匹配算法
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...
- MySQL查询字段类型为json的数据
测试表如下: /* Navicat Premium Data Transfer Source Server : Source Server Type : MySQL Source Server Ver ...
- HttpClient POST/SET方法
前言: 网络API接口:https://api.apiopen.top/searchMusic 此API接口返回类型为JSON格式类型 GET:从指定资源请求数据 POST:向指定资源提交要被处理的数 ...
- jenkins System error
背景 在使用WAR包安装jenkins后,启动tomcat,显示启动成功,但最后提示信息如下: 04-Dec-2018 03:28:21.563 WARNING [Computer.threadPoo ...
- Mybatis分页插件PageHelper的学习与使用
目录 中文教程 PageHelper使用 后端程序员都知道,在Web系统中,分页是一种常见的功能,我之前写的分页方法都比较麻烦,移植性也不高,这就很不乐观了.作为一个积极开朗的程序员,怎么能不去了解P ...
- Cannot read property 'nodeType' of null; audio元素默认样式下载按钮
1.chrome-->console抛出如下错误: Uncaught TypeError: Cannot read property 'nodeType' of null 错误原因:从stack ...
- 【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
HUAWEI CONNECT 2019 大会主题演讲.峰会演讲精彩资料速递,欢迎下载查阅. 主题 资料下载(登录后可下载附件) 演讲者 [主题演讲资料]2019华为全联接大会day 2 共筑高品质 ...