创建和使用集合

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

  • 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. P4334 [COI2007] Policija

    P4334 [COI2007] Policija 题意 一个无重边的无向图,每次询问删掉一条边或删掉一个点后两个点是否联通. 思路 连通性问题,我们可以考虑使用广义圆方树解决. 对于删掉一个点的情况: ...

  2. informix错误代码小结

    informix错误代码小结 所有错误可以用finderr+错误代码查到,英文的,这里中文注释便于理解. -100 错误的描述:C-ISAM错误:向具有唯一索引的字段加入一个重复值.  系统的操作:该 ...

  3. odoo12学习之javascript

    本文来源:https://www.jianshu.com/p/1a47fac01077 Odoo12 Javascript 参考指南   本文介绍了odoo javascript框架.从代码行的角度来 ...

  4. 第六篇--MFC美化界面

    1.MFC如何设置背景颜色 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CT ...

  5. 几张图搞懂 NodeJS 的流

    假设我们现在要盖一座房子,我们买了一些砖块,厂家正在送货.现在我们有两个选择,一是等所有砖块都到了以后再开始动工:二是到一批砖块就开始动工,砖块到多少我们就用多少. 这两种方式哪种效率更高呢?显然是第 ...

  6. bugku-web3

    这道题涉及的是HTML解码的问题,很简单,注意 HTML编码的格式 进入题目给出的网址,我们一直点击会一直循环跳动 勾选上阻止此页面创建更多对话框一栏,进去之后是空白的页面,查看源码. 这是一段HTM ...

  7. 分享我的CleanArchitecture for Razor Page项目模板

    这个项目是参考和整合了jasontaylordev/CleanArchitecture 和 blazorhero/CleanArchitecture 代码基础上,重构出来的新的项目,这两个项目都是非常 ...

  8. 学习vue过程中遇到的问题

    1.vue-quill-editor动态禁用 项目中把vue-quill-editor单独封装成了一个组件,通过props传递readOnly参数来设置是否禁用editor.开发中发现可以实现禁用效果 ...

  9. 算法竞赛中的常用JAVA API :HashSet 和 TreeSet(转载)

    算法竞赛中的常用JAVA API :HashSet 和 TreeSet set set容器的特点是不包含重复元素,也就是说自动去重. HashSet HashSet基于哈希表实现,无序. add(E ...

  10. 跟我一起写 Makefile(五)

    六.多目标 Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似.于是我们就能把其合并起来.当然,多个目标的生成规则的执行命令是同 ...