持有对象:总结JAVA中的常用容器和迭代器,随机数 速查
JAVA使用术语“Collection”来指代那些表示集合的对象,JAVA提供的接口很多,首先我们先来记住他们的层次结构:
java集合框架的基本接口/类层次结构 java.util.Collection [I]
+--java.util.List [I]
+--java.util.ArrayList [C]
+--java.util.LinkedList [C]
+--java.util.Vector [C]
+--java.util.Stack [C]
+--java.util.Set [I]
+--java.util.HashSet [C]
+--java.util.SortedSet [I]
+--java.util.TreeSet [C] java.util.Map [I]
+--java.util.SortedMap [I]
+--java.util.TreeMap [C]
+--java.util.Hashtable [C]
+--java.util.HashMap [C]
+--java.util.LinkedHashMap [C]
+--java.util.WeakHashMap [C]

对于那些没有使用泛型的容器,这些容器里存储Object对象,也就是说可以是不同类型的对象。无论是否使用泛型,行为都是相同的,一般还是用泛型保证类型安全,避免运行时错误,注意泛型不能以基础类型为参数。
一些静态方法:
使用Arrays.asList(objects...)生成了一个列表用于初始化容器
使用Collections.sort(list)来排序容器内的元素
使用Collections.shufle(list, rand)来打乱元素顺序
ArrayList
使用add(object)和addAll(collection)和add(index, object)和add(index, collection)来添加元素,实际上所有Collection的实现类都有前三个方法。
使用remove(object)和remove(index)和removeAll(collection)和clear()来删除元素,注意remove(object)只删除一个匹配的元素,然而remove(list)会删除所有匹配的元素。
使用set(index, object)替换一个元素。
使用get(index)来向客户端返回一个元素。
使用indexOf(object)来返回特定值的元素的索引
使用contains(object)和containsAll(collection)来确定元素是否存在
使用isEmpty()判断是否是空集
使用用size()返回元素的个数。
使用subList()进行切片,也就是返回原集合的片段。
使用toArray()来返回一个数组,无泛型版本则返回Object对象的数组。一个数组实体实际上是一些引用的序列。
使用retainAll(collection)来求交集,表示只保留同时存在于collection中的元素。
tips:小心,方法add(list)和remove(list)指的是添加或删除这个列表中的元素,而不是列表本身!有时候会出现模棱两可的情况,也就是说编译器可以找到多个成员方法都可以匹配被调用的方法,特别是泛型的参数是Integer的时候。经过在eclipse里做实验,并不会出现错误,如下代码,编译器优先选择把2当作基础类型来用。
List<Integer> lst = new ArrayList<Integer>();
lst.add(1);
lst.add(2);
lst.add(3);
lst.add(2,100);
out.println(lst);
lst.remove(new Integer(100));//这条语句可以被替换为 lst.remove(2),最后输出结果不变
out.println(lst);
Iterator
使用next()向客户端返回迭代器的next指针当前指向的元素。
使用hasNext()判断next指针是否还指向序列中的某个元素,也就是说迭代器的next指针当前是否指向END。
使用remove()删除迭代器最近返回给客户端的那个元素。也就是说不能一开始就使用这个方法。
使用set()来替换迭代器最近返回给客户端的那个元素,同样需要先用next()之后在使用本方法。
tips:迭代器的作用是帮助程序员生成更加通用的代码。无论面对哪一种具体的容器,不需要关心容器是不是用顺序表来实现的,都可以用相同的方式来访问容器中的元素。
ListIterator
它只能用于对List类型的访问,可以双向移动,容器的工厂方法可以接受一个整数参数,指定初始索引。
具有Iterator的所有方法。
使用previous()向客户端返回迭代器的previous指针当前指向的元素。
使用hasPrevious()判断previous指针否是指向序列中的某个元素,也就是说迭代器的previous指针是否指向BEFORE_BEGIN。(名字都是我自己起的,jdk源码并非如此,但是不影响理解)
LinkedList
具有大多数ArrayList的操作
使用element()或getFirst()和peek()返回位于列表头的元素。
使用remove()或removeFirst()和poll()删除位于列表头的元素。
使用removeLast()删除位于列表尾部的元素。
使用addFirst(object)在列表头添加元素
使用add(object)或addLast(object)或offer(object)在列表末尾添加元素
Map
使用get(key)来寻找一个键对应的值,如果没找到返回null。
使用keySet()来返回给进程所有的键值,组成集合
使用remove(key)来删除某个键值对
使用put(object,object)来添加键值对。
tip:各种获取方法的区别
values():
方法是获取集合中的所有的值----没有键,没有对应关系,
KeySet():
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
entrySet():
Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。
//第一种:普遍使用,二次取值for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//第二种
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三种:推荐,尤其是容量大时for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种for (String v : map.values()) {
System.out.println("value= " + v);
}
}
随机数的生成:
Randdom rand = new Random(47);
int r = rand.nextInt(20);
持有对象:总结JAVA中的常用容器和迭代器,随机数 速查的更多相关文章
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- java中最常用jar包的用途说明
java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...
- Java学习笔记--常用容器
容器 1. 出现原因 解决程序运行时需要创建新对象,在程序运行前不知道运行的所需的对象数量甚至是类型的问题. Java中提供了一套集合类来解决这些问题包括:List.Set.Queue.Map 2. ...
- C++ STL中的常用容器浅谈
STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...
- 聊聊并发-Java中的Copy-On-Write容器
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp78 聊聊并发-Java中的Copy-On-Write容器 Cop ...
- Java中最常用的集合类框架之 HashMap
一.HashMap的概述 HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构. HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射 ...
- 深入解析C++ STL中的常用容器
转载:http://blog.csdn.net/u013443618/article/details/49964299 这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中的 ...
- java中的常用类(二)
java中的常用类(二) Math类 Math类的声明:public final class Math extends Object Math类是与数学计算有关的类,里面的方法都是静态方法,直接使用类 ...
- java中一些常用的英语
abstract (关键字 ) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.rie ...
随机推荐
- log4j使用感受
1.为什么使用日志? 日志可以记录项目中的重要信息,关键输出信息,异常信息,为项目上线后期维护提供方便,在项目开发中尽量养成习惯写日志,而不是System.out.println()打印,不过在jun ...
- URAL 1297 Palindrome 最长回文子串
POJ上的,ZOJ上的OJ的最长回文子串数据量太大,用后缀数组的方法非常吃力,所以只能挑个数据量小点的试下,真要做可能还是得用manacher.贴一下代码 两个小错,一个是没弄懂string类的sub ...
- 1034-IBM技术俱乐部主席竞选
描述 今天IBM技术俱乐部举行主席竞选,你的任务是统计谁是得票最多的候选人. 输入 输入数据包含多组测试案例. 每组测试案例由N(0<N<1000)开头,N表示投票总数,后续N行每行包含一 ...
- POJ 3270 Cow Sorting(置换群)
题目链接 题意 : N头牛,每个牛的坏脾气都有一个值,每个值都不相同,把这个值按照从小到大排序,如果两个值交换,那么会花掉这两个值之和的时间,让你花最少的时间将每个值从小到大排好序,求最小的总时间. ...
- Android 解决ListView中每一项与button冲突
在listView的item里面如果有button,ImageButton等控件,会使得ListView不会被点击,解决方法是: ①在Button上面添加属性 android:focusable=&q ...
- LINQ——语言级集成查询入门指南(1)
本文主要是对语言级集成查询或简称为LINQ做一个介绍,包括LINQ是什么,不是什么,并对它在语言特性方面做一个简短的回顾,然后举一些使用LINQ的实际例子进行说明. 语言级集成查询是什么? 在我过去写 ...
- lintcode:插入区间
题目: 插入区间 给出一个无重叠的按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 样例 插入区间[2, 5] 到 [ ...
- Apache与Tomcat整合
Apache与Tomcat整合 一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache ...
- iOS使用Charts框架绘制—柱形图
首先看一下最终要实现的效果: 最终效果 一.初始化barChartView 绘制柱形图需要用到BarChartView这个类,下面是初始化代码: self.barChartView = [[BarCh ...
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...