创建和使用集合

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

  • 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. powerdesigner连接postgresql数据库生成pdm及word文档

    1.准备软件: powerdesigner165与postgresql的驱动:psqlodbc_11_01_0000 2.安装并破解完成powerdesigner165 参看链接:https://ww ...

  2. C++ 定义默认值void locals_index(int reg, int offset = 1);

    看jvm源码的时候怎么也看不懂,来回看了几次了就是关于iload 6 指令的解析 def(Bytecodes::_lload , ubcp|____|____|____, vtos, ltos, ll ...

  3. 在CentOS7下的OpenStack中配置使用Spice协议

    在CentOS7下的OpenStack中配置使用Spice协议 by 无若   1. 需要的包 在计算节点上 #yum install spice-html5   注意:使用yum安装spice-ht ...

  4. Crash course statistics

    Crash course statistics 01什么是统计学 描述性统计(Descriptive statistics) 推理统计可以得出之外的,基于"样本"的推论统计学来估计 ...

  5. 算法竞赛中的常用JAVA API :大数类(转载)

    5.算法竞赛中的常用JAVA API :大数类 摘要 java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1 对应的十进制数是9223372036854775807(long类型的最大 ...

  6. solr7.4.0+mysql+solrj(简而优美)

    目录: 1 solr7部署+创建核心2 solr mysql 连接 2.1 导入相关 jar包 2.2 配置连接信息 2.3 配置中文分析器3 solrj JAVA客户端应用 3.1 solrj 构建 ...

  7. MySQL学习06(事务和索引)

    事务 概述 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACI ...

  8. 1051 Pop Sequence (25分)栈

    刷题 题意:栈的容量是5,从1~7这7个数字,写5个测试数据 做法:模拟栈 #include<bits/stdc++.h> using namespace std; const int m ...

  9. Shell-03-表达式和运算符

    表达式和运算符 条件表达式语句 [ 1 -eq 1 ] [[ 1 -eq 1 ]] test 1 -eq 1 等同于 [ 1 -eq 1 ] [root@satest_192-168-3-121 sh ...

  10. 内网隧道与SOCKS代理思路总结

    早就想总结一下这部分内容了,总是有其他事情卡住,一直拖到现在 内网中有很多边界设备,比如防火墙.这种边界设备会控制内部主机的对外连接,一般会仅允许某些种类的端口开放或某种数据流量出入 这就意味着我们只 ...