创建和使用集合

  • 定义:集合是一个可变数组

  • List集合存储有序可重复序列

点击查看详细代码
import java.util.*;

public class List01 {
public static void main(String[] args) {
/**
*创建List集合
*/
List list = new ArrayList();
List list1 = new LinkedList();
List list2 = new Vector(); /**
*向集合中插入值,可插入Object类型的值
*/
list.add(12345);
list.add("狗剩");
list.add(true);
list.add(null);
list.add("abcd"); list1.add(12345);
list1.add("狗剩");
list1.add(true);
list1.add(null);
list1.add("abcd"); /**
*如何将集合中的值插入数组
*/
int l1 = 0;
int l2 = 0;
String[] strings = new String[5];
int[] ints = new int[5];
for(Object c : list){
if(c instanceof String){
strings[l1++] = (String) c;
}else if(c instanceof Integer){
ints[l2++] = (int)c;
}
}
System.out.println("String数组:" + Arrays.toString(strings));
System.out.println("int数组:" + Arrays.toString(ints)); /**
*如何做到一边向数组插入值,一边删除集合中的值
*/
System.out.println("遍历前:"+list1.size());
String[] strings1 = new String[5];
int[] ints1 = new int[5];
Iterator iterator = list1.iterator();
//遍历
while (iterator.hasNext()){
Object next = iterator.next();
if(next instanceof String){
//先将值添加到数组后赋值
strings1[l1++] = (String)next;
//System.out.println(next);
//删除
iterator.remove();
}else if(next instanceof Integer){
ints1[l2++] = (Integer)next;
iterator.remove();
}
}
System.out.println("遍历后:"+list1.size());
System.out.println("数组1:"+Arrays.toString(strings1));
System.out.println("数组2:"+Arrays.toString(ints1));
}
}

运行结果:

String数组:[狗剩, abcd, null, null, null]
int数组:[12345, 0, 0, 0, 0]
遍历前:5
遍历后:2
数组1:[null, null, 狗剩, abcd, null]
数组2:[0, 12345, 0, 0, 0]

基础扩展

  • Set集合存储无序不可重复序列
点击查看详细代码
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet; public class Set01 {
public static void main(String[] args) {
//创建集合
Set set = new HashSet();
Set set1 = new TreeSet(); //向集合中添加值
set.add("二狗");
set.add("abcd");
set.add(0123);
set.add(true);
set.add(0123); // 重复的元素会覆盖
set.add(null);
System.out.println(set);
}
}

运行结果:

[null, 二狗, 83, abcd, true]
  • Map集合以键值对的形式存储,不可重复
点击查看详细代码
import java.util.*;

public class Map01 {
public static void main(String[] args) {
Map map = new HashMap();
Map map1 = new TreeMap(); //添加键值对
map.put(null, null);
map.put("age", 23);
map.put("sex", 0);
map.put("sex", 0); //重复的元素会覆盖 /**
* 遍历map集合中的键值对
*/
Set entryset = map.entrySet();
Iterator iterator = entryset.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
System.out.println(next);
}
System.out.println(); /**
* forEach遍历
*/
map.forEach((key, value) -> {
System.out.println("key:"+key+",value:"+value);
});
}
}

特性

  • ArrayList集合查询快,增删慢;LinkedList集合查询慢,增删快;Vector集合线程安全,效率低
点击查看详细代码
import java.util.*;

public class List02 {
/**
*测试增删速度
* 插入1000000个数的时间
* 插入10000000个数的时间
*/
public static void main(String[] args) {
//获取当前时间戳
long l1 = System.currentTimeMillis();
//向集合中插入数值
List list = new ArrayList();
for(int i = 0; i<1000000; i++){
list.add(i);
}
long l2 = System.currentTimeMillis();
System.out.println("ArrayList:" + (l2 - l1));
System.out.println(); long l3 = System.currentTimeMillis();
List list1 = new LinkedList();
for(int i = 0; i<1000000; i++){
list1.add(i);
}
long l4 = System.currentTimeMillis();
System.out.println("LinkedList:" + (l4 - l3));
System.out.println(); long l5 = System.currentTimeMillis();
List list2 = new Vector();
for(int i = 0; i<1000000; i++){
list2.add(i);
}
long l6 = System.currentTimeMillis();
System.out.println("Vector:" + (l6 - l5));
System.out.println(); } }

插入1000000个数运行结果:

ArrayList:32

LinkedList:198

Vector:20

插入10000000个数运行结果:

ArrayList:2821

LinkedList:5205

Vector:801
  • Set集合的特性
点击查看详细代码
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet; public class Set02 {
/**
*测试增删速度
* 插入100000个数的时间
* 插入10000000个数的时间
*/
public static void main(String[] args) {
long l1 = System.currentTimeMillis();
Set Set = new HashSet();
for(int i = 0; i < 1000000; i++){
Set.add(i);
}
long l2 = System.currentTimeMillis();
System.out.println("HashSet:" + (l2 - l1)); long l3 = System.currentTimeMillis();
Set set1 = new TreeSet();
for(int i = 0; i < 1000000; i++){
set1.add(i);
}
long l4 = System.currentTimeMillis();
System.out.println("TreeSet:" + (l4 - l3)); } }

插入100000个数的运行结果

HashSet:70
TreeSet:112

插入10000000个数的运行结果

HashSet:2869
TreeSet:4992
  • Map集合的特性
点击查看详细代码
public class Map02 {
/**
*测试增删速度
* 插入100000个数的时间
* 插入10000000个数的时间
*/
public static void main(String[] args) {
long l1 = System.currentTimeMillis();
HashMap hashMap = new HashMap();
for(int i = 0; i<100000; i++){
hashMap.put(i,i);
}
long l2 = System.currentTimeMillis();
System.out.println("HashMap:" + (l2 - l1)); long l3 = System.currentTimeMillis();
LinkedHashMap hashMap2 = new LinkedHashMap();
for(int i = 0; i<100000; i++){
hashMap2.put(i,i);
}
long l4 = System.currentTimeMillis();
System.out.println("TreeMap:" + (l4 - l3));
} }

插入100000个数的运行结果:

HashMap:24
TreeMap:16

插入10000000个数的运行结果:

HashMap:5825
TreeMap:5106

Java集合的使用的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  3. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  4. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  5. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  6. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  7. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

  8. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  9. Java集合概述

    容器,是用来装东西的,在Java里,东西就是对象,而装对象并不是把真正的对象放进去,而是指保存对象的引用.要注意对象的引用和对象的关系,下面的例子说明了对象和对象引用的关系. String str = ...

  10. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

随机推荐

  1. ui自动化,不显示UI界面运行

    from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options ...

  2. 前端知识点--CSS overflow 属性

    问题:如何加滚动条? 给div 设置css 样式overflow:scroll div { width:150px; height:150px; overflow:scroll; } -------- ...

  3. Spring WebFlux 基础教程:参数校验

    请求参数校验,在实际的应用中很常见,网上的文章大部分提供的使用注解的方式做参数校验.本文主要介绍 Spring Webflux Function Endpoint 使用 Spring Validati ...

  4. 为什么说使用 Linux 系统学习 OpenGL 更方便

    前言 上一篇随笔介绍了我的电脑,同时也介绍了 Ubuntu 20.10 系统的安装和美化.这一篇,我将正式开始 OpenGL 之旅.使用 Ubuntu 来进行开发,不仅仅只是因为我对 Linux 桌面 ...

  5. 造轮子系列之RPC 1:如何从零开始开发RPC框架

    前言 RPC 框架是后端攻城狮永远都绕不开的知识点,目前业界比较知名有 Dubbo.Spring Cloud 等.很多人都停留在了只会用的阶段,作为程序猿,拥有好奇心深入学习,才能有效提高自己的竞争力 ...

  6. 【网站公告】避免反对百度的限制措施:百度搜索过来的访问会自动禁用js权限

    今天下午百度联系我们,发现通过百度搜索访问我们网站的博文时会出现下面反对百度的画面,让我们今天彻底处理好,保证不再出现这种情况. 我们排查后发现是这位博主申请了js权限,添加了下面的反对百度的脚本: ...

  7. DASCTF七月赛两道Web题复现

    Ezfileinclude(目录穿越) 拿到http://183.129.189.60:10012/image.php?t=1596121010&f=Z3F5LmpwZw== t是时间,可以利 ...

  8. Vue系列-03-vue-cli自动化工具

    使用Vue-CLI创建项目 安装vue-cli脚手架 Mac安装vue-cli脚手架 lichengguo@lichengguodeMacBook-Pro ~ % sudo npm install - ...

  9. 【笔记】KNN之分类准确度

    分类准确度 分类准确度 以sklearn中的手写数字datasets.load_digits为例,其是8*8的图形,具有64个特征值,类别由0到9 我们挑选出666这个图形,将其可视化 X = dig ...

  10. vue cli中的env详解

    前言 相信使用过 vueCli 开发项目的小伙伴有点郁闷,正常开发时会有三个接口环境(开发,测试,正式),但是 vueCli 只提供了两种 development,production(不包含 tes ...