作为一个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. 如何在maven中下载jar包

    1.进入maven网址  https://mvnrepository.com/ 2.搜索你想要的包的名字 3.找到列表中你想要的包 4.点击一个版本 5.点击 view all 6.找到你想要的包,点 ...

  2. PostGIS 报错为org.postgresql.util.PSQLException:错误: Operation on mixed SRID geometries

    说明: 在用Openlayers与Geoserver进行开发,做在线编辑功能时,出现一个问题:每当我新增了一根要素后,再次用wfs的方式进行点击查询时,会报错mixed SRID. 通过研究发现在数据 ...

  3. JavaScript笔记六

    1.对象(Object) - 对象是JS中的引用数据类型 - 对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性 - 使用typeof检查一个对象时,会返回object - 创建对象 - ...

  4. Python使用场景和应用领域

    Python特点 1.Python使用C语言开发,但是Python不再有C语言中的指针等复杂的数据类型. 2.Python具有很强的面向对象特性,而且简化了面向对象的实现.它消除了保护类型.抽象类.接 ...

  5. 7. 彤哥说netty系列之Java NIO核心组件之Selector

    --日拱一卒,不期而至! 你好,我是彤哥,本篇是netty系列的第七篇. 简介 上一章我们一起学习了Java NIO的核心组件Buffer,它通常跟Channel一起使用,但是它们在网络IO中又该如何 ...

  6. CSS 使用id属性的规则

    html中的id属性是什么?本篇文章给大家带来的内容是介绍html中的id属性,让大家了解id属性的使用方法,希望对大家有所帮助. html的id属性是什么? html的id属性其实就是一个HTML元 ...

  7. bs4-爬取小说

    bs4 bs4有两种运行方式一种是处理本地资源,一种是处理网络资源 本地 from bs4 import BeautifulSoup if __name__ == '__main__': fr = o ...

  8. block中self会造成循环引用问题

    将代码块中的 self换成unsafeSelf __unsafe_unretained 与 __weak 99%相同 __weak 当对象释放之后 会自动设置为nil 而__unsafe_unreta ...

  9. 谈谈.net对象生命周期

     不用程序员操心的堆 — 托管堆         程序在计算机上跑着,就难免会占用内存资源来存储在程序运行过程中的数据,我们按照内存资源的存取方式将内存划分为堆内存和栈内存.    栈内存,通常使用的 ...

  10. NoSql中的CAP原则

    C:一致性 .A:可用性.P:分区容错性 Partition tolerance(分区容错性): 大多数分布式系统都分布在多个子网络.每个子网络就叫做一个区(partition).分区容错的意思是,区 ...