1.集合概述

集合按照存储结构可以分为两类,即单列集合 Collection 和双列集合 Map。
* Collection 用于存储一系列符合某种规则的元素,它有两个重要的自接口,分别是List和Set。
--List 的特点是元素有序、元素可重复。List接口的主要实现类有 ArrayList 和 LinkeList
--Set 的特点是元素无序、元素不可重复。Set 接口的主要实现类有 HashSet 和 TreeSet * Map 用于存储具有键(Key)、值(Value)映射关系的元素。Map接口的主要实现类有HashMap 和 TreeMap。

2.实例
2.1 ArrayList 实例

package test02;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator; public class ArrayListExamples { public static void main(String[] args) { //创建一个空的数组链表对象list,list用来存放String类型的数据
ArrayList<String> list = new ArrayList<String>(); //添加元素到list对象中
list.add("Item01");
list.add("Item02");
list.add(2,"Item03"); //将会把Item03字符串增加到list的第3个位置
list.add("Item04"); // 显示数组链表中的内容
System.out.println("The arraylist contains the following elements: " + list); // 检查元素的位置
int pos = list.indexOf("Item2");
System.out.println("The index of Item2 is: " + pos); // 检查数组链表是否为空
boolean check = list.isEmpty();
System.out.println("Checking if the arraylist is empty: " + check); // 获取链表的大小
int size = list.size();
System.out.println("The size of the list is: " + size); // 检查数组链表中是否包含某元素
boolean element = list.contains("Item5");
System.out.println("Checking if the arraylist contains the object Item5: "+ element); // 获取指定位置上的元素
String item = list.get(0);
System.out.println("The item is the index 0 is: " + item); // 遍历arraylist中的元素
// 第1种方法: 循环使用元素的索引和链表的大小
System.out.println("Retrieving items with loop using index and size list");
for (int i = 0; i < list.size(); i++) {
System.out.println("Index: " + i + " - Item: " + list.get(i));
} // 第2种方法:使用foreach循环
System.out.println("Retrieving items using foreach loop");
for (String str : list) {
System.out.println("Item is: " + str);
} // 第三种方法:使用迭代器
// hasNext(): 返回true表示链表链表中还有元素
// next(): 返回下一个元素
System.out.println("Retrieving items using iterator");
for (Iterator<String> it = list.iterator(); it.hasNext();) {
System.out.println("Item is: " + it.next());
} // 替换元素
list.set(1, "NewItem");
System.out.println("The arraylist after the replacement is: " + list); // 移除元素
// 移除第0个位置上的元素
list.remove(0); // 移除第一次找到的 "Item3"元素
list.remove("Item3");
System.out.println("The final contents of the arraylist are: " + list); // 转换 ArrayList 为 Array
String[] simpleArray = list.toArray(new String[list.size()]);
System.out.println("The array created after the conversion of our arraylist is: "+ Arrays.toString(simpleArray)); }
}

2.2 LinkedList 实例

2.2.1 LinkedList遍历方式   

package test02;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.NoSuchElementException; public class LinkedListThruTest {
public static void main(String[] args) {
// 通过Iterator遍历LinkedList
iteratorLinkedListThruIterator(getLinkedList()); // 通过快速随机访问遍历LinkedList
iteratorLinkedListThruForeach(getLinkedList()); // 通过for循环的变种来访问遍历LinkedList
iteratorThroughFor2(getLinkedList()); // 通过PollFirst()遍历LinkedList
iteratorThroughPollFirst(getLinkedList()); // 通过PollLast()遍历LinkedList
iteratorThroughPollLast(getLinkedList()); // 通过removeFirst()遍历LinkedList
iteratorThroughRemoveFirst(getLinkedList()); // 通过removeLast()遍历LinkedList
iteratorThroughRemoveLast(getLinkedList());
} //创建列表
private static LinkedList getLinkedList() {
LinkedList llist = new LinkedList();
for (int i = 0; i < 100000; i++)
llist.addLast(i); return llist;
} /**
* 通过快迭代器遍历LinkedList
*/
private static void iteratorLinkedListThruIterator(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis(); for (Iterator iter = list.iterator(); iter.hasNext();)
iter.next(); // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out
.println("iteratorLinkedListThruIterator:" + interval + " ms");
} /**
* 通过快速随机访问遍历LinkedList
*/
private static void iteratorLinkedListThruForeach(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis(); int size = list.size();
for (int i = 0; i < size; i++) {
list.get(i);
}
// 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorLinkedListThruForeach:" + interval + " ms");
} /**
* 通过另外一种for循环来遍历LinkedList
*/
private static void iteratorThroughFor2(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis(); for (Integer integ : list)
; // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorThroughFor2:" + interval + " ms");
} /**
* 通过pollFirst()来遍历LinkedList
*/
private static void iteratorThroughPollFirst(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis();
while (list.pollFirst() != null)
; // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorThroughPollFirst:" + interval + " ms");
} /**
* 通过pollLast()来遍历LinkedList
*/
private static void iteratorThroughPollLast(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis();
while (list.pollLast() != null)
; // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorThroughPollLast:" + interval + " ms");
} /**
* 通过removeFirst()来遍历LinkedList
*/
private static void iteratorThroughRemoveFirst(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis();
try {
while (list.removeFirst() != null)
;
} catch (NoSuchElementException e) {
} // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorThroughRemoveFirst:" + interval + " ms");
} /**
* 通过removeLast()来遍历LinkedList
*/
private static void iteratorThroughRemoveLast(LinkedList<Integer> list) {
if (list == null)
return; // 记录开始时间
long start = System.currentTimeMillis();
try {
while (list.removeLast() != null)
;
} catch (NoSuchElementException e) {
} // 记录结束时间
long end = System.currentTimeMillis();
long interval = end - start;
System.out.println("iteratorThroughRemoveLast:" + interval + " ms");
} }

2.2.2 LinkedList的常用API示例

package test02;

import java.util.List;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.NoSuchElementException; public class LinkedListTest {
public static void main(String[] args) {
// 测试LinkedList的API
testLinkedListAPIs(); // 将LinkedList当作 LIFO(后进先出)的堆栈
useLinkedListAsLIFO(); // 将LinkedList当作 FIFO(先进先出)的队列
useLinkedListAsFIFO();
} /*
* 测试LinkedList中部分API
*/
private static void testLinkedListAPIs() {
String val = null;
// LinkedList llist;
// llist.offer("10");
// 新建一个LinkedList LinkedList llist = new LinkedList();
// ---- 添加操作 ----
// 依次添加1,2,3
llist.add("1");
llist.add("2");
llist.add("3"); // 将“4”添加到第一个位置
llist.add(1, "4"); System.out.println("\nTest \"addFirst(), removeFirst(), getFirst()\"");
// (01) 将“10”添加到第一个位置。 失败的话,抛出异常!
llist.addFirst("10");
System.out.println("llist:" + llist); // (02) 将第一个元素删除。 失败的话,抛出异常!
System.out.println("llist.removeFirst():" + llist.removeFirst());
System.out.println("llist:" + llist); // (03) 获取第一个元素。 失败的话,抛出异常!
System.out.println("llist.getFirst():" + llist.getFirst()); System.out.println("\nTest \"offerFirst(), pollFirst(), peekFirst()\"");
// (01) 将“10”添加到第一个位置。 返回true。
llist.offerFirst("10");
System.out.println("llist:" + llist); // (02) 将第一个元素删除。 失败的话,返回null。
System.out.println("llist.pollFirst():" + llist.pollFirst());
System.out.println("llist:" + llist); // (03) 获取第一个元素。 失败的话,返回null。
System.out.println("llist.peekFirst():" + llist.peekFirst()); System.out.println("\nTest \"addLast(), removeLast(), getLast()\"");
// (01) 将“20”添加到最后一个位置。 失败的话,抛出异常!
llist.addLast("20");
System.out.println("llist:" + llist); // (02) 将最后一个元素删除。 失败的话,抛出异常!
System.out.println("llist.removeLast():" + llist.removeLast());
System.out.println("llist:" + llist); // (03) 获取最后一个元素。 失败的话,抛出异常!
System.out.println("llist.getLast():" + llist.getLast()); System.out.println("\nTest \"offerLast(), pollLast(), peekLast()\"");
// (01) 将“20”添加到第一个位置。 返回true。
llist.offerLast("20");
System.out.println("llist:" + llist); // (02) 将第一个元素删除。 失败的话,返回null。
System.out.println("llist.pollLast():" + llist.pollLast());
System.out.println("llist:" + llist); // (03) 获取第一个元素。 失败的话,返回null。
System.out.println("llist.peekLast():" + llist.peekLast()); // 将第3个元素设置300。不建议在LinkedList中使用此操作,因为效率低!
llist.set(2, "300");
// 获取第3个元素。不建议在LinkedList中使用此操作,因为效率低!
System.out.println("\nget(3):" + llist.get(2)); // ---- toArray(T[] a) ----
// 将LinkedList转行为数组
String[] arr = (String[]) llist.toArray(new String[0]);
for (String str : arr)
System.out.println("str:" + str); // 输出大小
System.out.println("size:" + llist.size());
// 清空LinkedList
llist.clear();
// 判断LinkedList是否为空
System.out.println("isEmpty():" + llist.isEmpty() + "\n"); } /**
* 将LinkedList当作 LIFO(后进先出)的堆栈
*/
private static void useLinkedListAsLIFO() {
System.out.println("\nuseLinkedListAsLIFO");
// 新建一个LinkedList
LinkedList stack = new LinkedList(); // 将1,2,3,4添加到堆栈中
stack.push("1");
stack.push("2");
stack.push("3");
stack.push("4");
// 打印“栈”
System.out.println("stack:" + stack); // 删除“栈顶元素”
System.out.println("stack.pop():" + stack.pop()); // 取出“栈顶元素”
System.out.println("stack.peek():" + stack.peek()); // 打印“栈”
System.out.println("stack:" + stack);
} /**
* 将LinkedList当作 FIFO(先进先出)的队列
*/
private static void useLinkedListAsFIFO() {
System.out.println("\nuseLinkedListAsFIFO");
// 新建一个LinkedList
LinkedList queue = new LinkedList(); // 将10,20,30,40添加到队列。每次都是插入到末尾
queue.add("10");
queue.add("20");
queue.add("30");
queue.add("40"); // 打印“队列”
System.out.println("queue:" + queue); // 删除(队列的第一个元素)
System.out.println("queue.remove():" + queue.remove()); // 读取(队列的第一个元素)
System.out.println("queue.element():" + queue.element()); // 打印“队列”
System.out.println("queue:" + queue);
}
}

2.3 HashMap 实例
2.3.1  HashMap 遍历方式   

package test02;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry; public class HashMapDemo { public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("cn", "中国");
hashMap.put("jp", "日本");
hashMap.put("fr", "法国"); System.out.println(hashMap);
System.out.println("cn:" + hashMap.get("cn"));
System.out.println(hashMap.containsKey("cn"));
System.out.println(hashMap.keySet());
System.out.println(hashMap.isEmpty()); hashMap.remove("cn");
System.out.println(hashMap.containsKey("cn")); // 采用Iterator遍历HashMap
Iterator it = hashMap.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
System.out.println("key:" + key);
System.out.println("value:" + hashMap.get(key));
} // 遍历HashMap的另一个方法
Set<Entry<String, String>> sets = hashMap.entrySet();
for (Entry<String, String> entry : sets) {
System.out.print(entry.getKey() + ", ");
System.out.println(entry.getValue());
}
}
}

2.3.2 结合List和HashMap实现的例子

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map.Entry; public class HashMapDemo { public static void main(String[] args) { HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put("cn", "中国");
hashMap.put("jp", "日本");
hashMap.put("fr", "法国"); System.out.println(hashMap);
System.out.println("cn:" + hashMap.get("cn"));
System.out.println(hashMap.containsKey("cn"));
System.out.println(hashMap.keySet());
System.out.println(hashMap.isEmpty()); hashMap.remove("cn");
System.out.println(hashMap.containsKey("cn")); // 采用Iterator遍历HashMap
Iterator it = hashMap.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
System.out.println("key:" + key);
System.out.println("value:" + hashMap.get(key));
} // 遍历HashMap的另一个方法
Set<Entry<String, String>> sets = hashMap.entrySet();
for (Entry<String, String> entry : sets) {
System.out.print(entry.getKey() + ", ");
System.out.println(entry.getValue());
}
}
}

java (10) 集合类的更多相关文章

  1. 首先java中集合类主要有两大分支

    本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重 ...

  2. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

  3. java基础 集合类

    java集合类主要有以下集中: List结构的集合类: ArrayList类, LinkedList类, Vector类, Stack类 Map结构的集合类: HashMap类,Hashtable类 ...

  4. Java的集合类

    转自:Q.Mr的博客 http://www.cnblogs.com/zrtqsk/p/3472258.html (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教 ...

  5. 如约而至,Java 10 正式发布!

    3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  6. Java 10 的 10 个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  7. Java 10 var关键字详解和示例教程

    在本文中,我将通过示例介绍新的Java SE 10特性——“var”类型.你将学习如何在代码中正确使用它,以及在什么情况下不能使用它. 介绍 Java 10引入了一个闪亮的新功能:局部变量类型推断.对 ...

  8. 【整理】Java 10新特性总结

    Java 9才发布几个月,很多玩意都没整明白,Java 10就来了..这时候我真尼玛想说:线上用的JDK 7 ,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK 10……刚学Java的 ...

  9. Java 10 实战第 1 篇:局部变量类型推断

    现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了. 今天要实战的是 Java 10 中最重要的特性:局部变量 ...

随机推荐

  1. Java项目性能持续优化中……

     尽量使用StringBuilder和StringBuffer进行字符串连接, 参考链接: Java编程中“为了性能”尽量要做到的一些地方

  2. css3实现小箭头,各种图形

    转:http://blog.csdn.net/tangtang5963/article/details/51490107 https://segmentfault.com/a/119000000278 ...

  3. storm学习之六-使用Maven 生成jar包多种方式

    Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...

  4. rlwrap安装报错You need the GNU readline 解决方法

    首先大家肯定知道rlwrap是干什么的? 在linux以及unix中,sqlplus的上下左右.回退无法使用,会出现乱码情况.而rlwrap这个软件就是用来解决这个的.   这个错误曾经困扰我很久很久 ...

  5. lrzsz离线安装方法

    lrzsz离线安装方法 到网上下载lrzsz安装包,这里以lrzsz-0.12.20.tar.gz为例 2 打开终端 cd 到安装包所在目录 tar zxvf lrzsz-0.12.20.tar.gz ...

  6. tomcat启动时设定环境变量

    在tomcat的bin目录中修改startup.bat 设置CATALINA_HOME set "CATALINA_HOME=F:\solr\apache-tomcat\apache-tom ...

  7. VC获得本机网络连接状态

    /本机网络连接类型(成功) #define  NET_TYPE_RAS_DIAL_UP_CONNECT_NET           0x01    //上网类型:采用RAS拨号连接上网    0x01 ...

  8. lua中实现倒计时

    今天在开发的时候,涉及到了使用倒计时来显示. 首先自己的思路是: 1.设计显示的Lable. 2.对传入的时间进行处理,转成字符串00:00:00.通过调用回调函数来控制一秒刷新一次. 转换算法: h ...

  9. mysql add foreign key 不成功

    今天修改了mysql数据表的结构,然后添加外键index一直不成功: 查到问题在于,被外键的表,引擎不是Innodb,而是MyISAM. 修改好,以后保存报错: 解决办法,将数据库表里的数据全部删除, ...

  10. Kafka监控工具KafkaOffsetMonitor配置及使用

    转载:https://www.cnblogs.com/dadonggg/p/8242682.html jar包下载地址 KafkaOffsetMonitor托管在Github上,可以通过Github下 ...