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. vs2013(vs2015) 打开vs2010 找不到此项目类型所基于的应用程序 MVC2 升级 MVC5 不能加载Web项目

    Upgrading an ASP.NET MVC 2 Project to ASP.NET MVC 3 Tools Update ASP.NET MVC 3 can be installed side ...

  2. 超炫酷的jQuery/HTML5应用效果及源码

    jQuery非常强大,我们之前也用jQuery分享过很多实用的插件.HTML5可以让网页变得更加绚丽多彩,将HTML5和jQuery结合使用那将发挥更棒的效果. 今天向大家收集了一些关于HTML5和j ...

  3. middle源码

    CREATE TABLE `middle` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `innserSessionid` VARCHAR(250 ...

  4. EJB的魅惑来源

      有人发帖子问学习EJB有个屁用啊?看完下面一个简单的介绍,也许你对EJB很感兴趣,它的优点极具魅惑力. 一.EJB是基于组件的开发. 利用Enterprise JavaBean,你就能像搭积木一样 ...

  5. SharePoint 2013 页面中window/document.onload/ready 事件不能触发的解决方案

    问题1:在SharePoint 2013页面中使用Javascript 事件window/document.onload/ready时,你会发现处理onload/ready事件的代码根本不能执行. 问 ...

  6. VBscript实现开机自动启动,自动复制原件后启动

    set fso = createobject("scripting.filesystemobject") set ws = createobject("wscript.s ...

  7. php json_encode 返回false

    今天用ajax请求不到数据,发现问题出现在最后一句 echo json_encode($data); var_dump(json_encode($data));输出false 使用json_last_ ...

  8. 一个标准的,兼容性很好的div仿框架的基础模型!

    <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" conten ...

  9. QT编译错误:cannot find file: *.pro

    编译一个之前同事写的QT程序,结果出现了编译错误:cannot find file: *.pro 解决方法:将程序放在英文路径下 尽管出现一些红色的编译信息部门,但是最终还算是编译成功了~

  10. JSP求和计算

    已知两个数的值,如何求和并输出? <%@ page language="java" import="java.util.*,java.text.*" co ...