
package comxjjutil;
import javautilHashSet;
import javautilList;
import javautilMap;
import javautilRandom;
import javautilSet;
/
随机数工具,单例模式
@author XuJijun
/
public class RandomUtils {
private static Random random;
//双重校验锁获取一个Random单例
public static Random getRandom() {
if(random==null){
synchronized (RandomUtilsclass) {
if(random==null){
random =new Random();
}
}
}
return random;
}
/
获得一个[0,max)之间的整数。
@param max
@return
/
public static int getRandomInt(int max) {
return Mathabs(getRandom()nextInt())%max;
}
/
获得一个[0,max)之间的整数。
@param max
@return
/
public static long getRandomLong(long max) {
return Mathabs(getRandom()nextInt())%max;
}
/
从list中随机取得一个元素
@param list
@return
/
public static <e> E getRandomElement(List<e> list){
return listget(getRandomInt(listsize()));
}
/
从set中随机取得一个元素
@param set
@return
/
public static <e> E getRandomElement(Set<e> set){
int rn = getRandomInt(setsize());
int i = 0;
for (E e : set) {
if(i==rn){
return e;
}
i++;
}
return null;
}
/
从map中随机取得一个key
@param map
@return
/
public static <k, v=""> K getRandomKeyFromMap(Map<k, v=""> map) {
int rn = getRandomInt(mapsize());
int i = 0;
for (K key : mapkeySet()) {
if(i==rn){
return key;
}
i++;
}
return null;
}
/
从map中随机取得一个value
@param map
@return
/
public static <k, v=""> V getRandomValueFromMap(Map<k, v=""> map) {
int rn = getRandomInt(mapsize());
int i = 0;
for (V value : mapvalues()) {
if(i==rn){
return value;
}
i++;
}
return null;
}
public static void main(String[] args) {
Set<string> set = new HashSet<>();
for (int i = 0; i < 12; i++) {
setadd(I am: + i);
}
for (int i = 0; i < 10; i++) {
Systemoutprintln(getRandomElement(set));
}
}
}
</string></k,></k,></k,></k,></e></e></e></e>
一个List对象也无非是一个对象,在Map里存取放置都是一种方式,如果你确定取出来的是某类的对象,直接转型就可以了:
List c = (List)bget("a");
在JDK15以上提供了泛型,能够更好地控制类型,减少强行转型的次数。比如我们如果知道这些List里的元素永远是String的话,你就可以写
List<String> a = new ArrayList<String>;
HashMap<String,List<String>> b =new HashMap<String,List<String>>();
bput("a",a);
List<String> c = bget("a");
最后一步不需要强行转型,而且如果在bput("a",a);这一步如果你想往b里面放一个不是List<String>的东西,或者使用的key不是一个String,编译器就会抗议。
泛型学起来有一定难度,尤其是一些高级用法,写起来有时会觉得繁琐,但是我认为物有所值,能够帮助我们在编译期发现不少潜在问题,写出代码更强健。
本篇文章是对在JS中Map和List的简单实现代码进行了详细的分析介绍 需要的朋友参考下 复制代码 代码如下: / MAP对象 实现MAP功能 接口 size() 获取MAP元素个数 isEmpty() 判断MAP是否为空 clear() 删除MAP所有元素 put(key value) 向MAP中增加元素(key value) remove(key) 删除指定KEY的元素 成功返回True 失败返回False get(key) 获取指定KEY的元素值VALUE 失败返回NULL element(index) 获取指定索引的元素(使用element key element value获取KEY和VALUE) 失败返回NULL containsKey(key) 判断MAP中是否含有指定KEY的元素 containsValue(value) 判断MAP中是否含有指定VALUE的元素 values() 获取MAP中所有VALUE的数组(ARRAY) keys() 获取MAP中所有KEY的数组(ARRAY) 例子 var map = new Map(); map put("key" "value"); var val = map get("key") …… / function Map() { this elements = new Array(); //获取MAP元素个数 this size = function() { return this elements length; }; //判断MAP是否为空 this isEmpty = function() { return (this elements length < ); }; //删除MAP所有元素 this clear = function() { this elements = new Array(); }; //向MAP中增加元素(key value) this put = function(_key _value) { this elements push( { key : _key value : _value }); }; //删除指定KEY的元素 成功返回True 失败返回False this remove = function(_key) { var bln = false; try { for (i = ; i < this elements length; i++) { if (this elements[i] key == _key) { this elements splice(i ); return true; } } } catch (e) { bln = false; } return bln; }; //获取指定KEY的元素值VALUE 失败返回NULL this get = function(_key) { try { for (i = ; i < this elements length; i++) { if (this elements[i] key == _key) { return this elements[i] value; } } } catch (e) { return null; } }; //获取指定索引的元素(使用element key element value获取KEY和VALUE) 失败返回NULL this element = function(_index) { if (_index < || _index >= this elements length) { return null; } return this elements[_index]; }; //判断MAP中是否含有指定KEY的元素 this containsKey = function(_key) { var bln = false; try { for (i = ; i < this elements length; i++) { if (this elements[i] key == _key) { bln = true; } } } catch (e) { bln = false; } return bln; }; //判断MAP中是否含有指定VALUE的元素 this containsValue = function(_value) { var bln = false; try { for (i = ; i < this elements length; i++) { if (this elements[i] value == _value) { bln = true; } } } catch (e) { bln = false; } return bln; }; //获取MAP中所有VALUE的数组(ARRAY) this values = function() { var arr = new Array(); for (i = ; i < this elements length; i++) { arr push(this elements[i] value); } return arr; }; //获取MAP中所有KEY的数组(ARRAY) this keys = function() { var arr = new Array(); for (i = ; i < this elements length; i++) { arr push(this elements[i] key); } return arr; }; } 复制代码 代码如下: / js实现list / function List() { this value = []; / 添加 / this add = function(obj) { return this value push(obj); }; / 大小 / this size = function() { return this value length; }; / 返回指定索引的值 / this get = function(index) { return this value[index]; }; / 删除指定索引的值 / this remove = function(index) { this value splice(index ); return this value; }; / 删除全部值 / this removeAll = function() { return this value = []; }; / 是否包含某个对象 / this constains = function(obj) { for ( var i in this value) { if (obj == this value[i]) { return true; } else { continue; } } return false; }; / 是否包含某个对象 / this getAll = function() { var allInfos = ; for ( var i in this value) { if(i != (value length )){ allInfos += this value[i]+" "; }else{ allInfos += this value[i]; } } alert(allInfos); return allInfos += this value[i]+" ";; }; } lishixinzhi/Article/program/Java/JSP/201311/20400
1先初始化一个map
public class TestMap {
public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
2keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key
public void testKeySet() {
for (Integer key : mapkeySet()) {
Systemoutprintln(key);
}
}
// values 获取value
public void testValues() {
for (Integer value : mapvalues()) {
Systemoutprintln(value);
}
}
3keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value
需要说明的是,该方法不是最优选择,一般不推荐使用
// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
for (Integer key : mapkeySet()) {
Systemoutprintln(key + ":" + mapget(key));
}
}
4entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法
// entrySet 获取key and value
public void testEntry() {
for (MapEntry<Integer, Integer> entry : mapentrySet()) {
Systemoutprintln(entrygetKey() + ":" + entrygetValue());
}
}
5Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
// Iterator entrySet 获取key and value
public void testIterator() {
Iterator<MapEntry<Integer, Integer>> it = mapentrySet()iterator();
while (ithasNext()) {
MapEntry<Integer, Integer> entry = itnext();
Systemoutprintln(entrygetKey() + ":" + entrygetValue());
// itremove(); 删除元素
}
}
在EL中,方括号运算符用来检索数组和集合的元素。对于实现 javautilMap 接口的集合,方括号运算符使用关联的键查找存储在映射中的值。
在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式 ${map['key']} 返回与 map标识符所引用的 Map 中的 "key" 键相关联的值。
当forEach 的items属性中的表达式的值是javautilMap时,则var中命名的变量的类型就是 javautilMapEntry。这时var=entry的话,用表达式${entrykey}取得键名。用表达${entryvalue}得到每个entry的值。这是因为javautilMapEntry对象有getKey和getValue方法,表达式语言遵守JavaBean的命名约定。
<%
Map<String,String> map2 = new HashMap();
map2put("a","hello world");
map2put("b","this is map");
requestsetAttribute("map2",map2);
%>
<br>
键值对遍历 <br>
<c:forEach var="item" items="${map2}">
${itemkey} > ${itemvalue} <br>
</c:forEach>
键遍历 <br>
<c:forEach var="item" items="${map2}">
${itemkey}<br>
</c:forEach>
值遍历 <br>
<c:forEach var="item" items="${map2}">
${itemvalue}<br>
</c:forEach>
<body>
<br><br>
<%
List<String> list = new ArrayList<String>();
listadd("first");
listadd("second");
List<String> list2 = new ArrayList<String>();
list2add("aaaaaa");
list2add("bbbbbb");
Map<String,List<String>> map = new HashMap();
mapput("a",list);
mapput("b",list2);
requestsetAttribute("map",map);
%>
通过键获得列表值,并遍历列表 <br>
<c:forEach var="item" items="${map['a']}">
${item }<br>
</c:forEach><br>
<c:forEach var="item" items="${map['b']}">
${item }<br>
</c:forEach> <br>
map中值为列表,直接遍历列表中的每一项 <br>
<c:forEach var="item" items="${map}">
<c:forEach items="${itemvalue}" var="it">
${it }<br>
</c:forEach>
</c:forEach>
从essential c++上搬来的,还没验证:
#include<map
#include<string
#include<iostreamint main(){map<string,int words;
map<string,int::iterator it=wordsbegin();
for(;it!=wordsend();++it)
cout<<"key:"<<it-first
<<"value:"<<it-second<<end1;return 0;}std::map<key, value mymap;
map<key,value::iterator begiter = mymapbegin();
map<key,value::iterator enditer = mymapend();
for(;begiter!=enditer;++begiter){// }
尽管map的底层一般由红黑树实现,但map的迭代器还是使它具有了一个类似线性结构的访问接口。因此,所有适用于list等顺序容器的访问方法都可以用来对map进行访问。诸如for_each(),accumulate()等遍历区间的算法都可以用来遍历map。
另外一点值得注意的是,在顺序访问map的元素时,它们是有序的。
第一个,使用keySet方法,获得key的set,然后遍历set,就可以获得所有的value 第二个,使用entrySet方法,获得map中的所有键值对的一个视图,遍历就可获得所有的key、value
以上就是关于easyui控件,如何在页面中获取map类型的list集合的值全部的内容,包括:easyui控件,如何在页面中获取map类型的list集合的值、JAVA 如何获取存放在MAP中的list 对象、JS Map 和 List 的简单实现代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)