java集合和数组互相转换
2015-01-18 00:17
225 查看
// 抽时间多了解集合框架和数组,不能只要是数组就会写ArrayList,碰到键值对就是HashMap // 每次用到集合,我们都要像小和尚念经般的熟悉下面内容: a) List Set Map是集合体系中最主要的三个接口,List和Set继承自Collection接口,Map也属于集合系统,但是和Collection不同: b) Set不允许重复,HashSet和TreeSet是两个主要的实现类,值不能重复是最大的特点: c) List有序且允许元素重复,ArrayList,LinkedList和Vector是三个主要的实现类,ArrayList是线程不安全的, Vector是线程安全的,这两个底层都是由数组实现的,LinkedList是线程安全的,底层通过链表来实现的; d) Map 是键值对集合,其中Key是集合,key是不能重复的(HashCode函数和equals函数决定的),value可以重复,HashMap,TreeMap和 Hashtable是Map的三个组要实现类, HashTable 是线程安全的,不能存储null值, HashMap是线程不安全的,可以存储null值; e) Hashtable的contains(Object),指的是是否包含value而不是key // HashTable 和HashMap 之间还有些文章要做:[推荐使用HashMap而不是HashTable] Hashtable和HashMap类有三个重要的不同之处,第一个不同主要是历史原因,Hashtable是基于陈旧的Dictionary类的, HashMap是Java 1.2引进的Map接口的一个实现。 也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的 行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法 就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象 来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断 Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。 第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的 key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一 个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。 一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的 功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。 关于Properties 有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一 些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简 单的方法,但Java提供了另外一种方法。 Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable 的用法相象,但是类增加了两个节省时间的方法,你应该知道。 Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件, 并设定Properties对象来包含keys和values。 注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。 另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该 用setProperty()和getProperty(),它们用String参数。 // 数组拷贝的方法: System.arraycopy public static void arraycopy(Object src, int srcPos,Object dest,int destPos,int length) Set set = new HashSet(Array.asList(array)); // 数组的浅拷贝与深拷贝: // java中集合与数组之间的转化: 1) 采用集合.toArray() 方法,根据转化为数组的类型又可以分为: 转化为Object[] 类型数组 Object[] listArray = list.toArray(); Object[] setArray = set.toArray(); 2) 转化为具体的数组:(参数为数组对象::) String[] listArray = (String[])list.toArray(new String[0]); String[] listArray = (String[])list.toArray(new String[list.size()]); String[] setArray = (String[])set.toArray(new String[0]); String[] setArray = (String[])set.toArray(new String[set.size()]); 3) 数组转化为集合 数组.asList()方法: // 对于int[] 数组不能直接这样做,因为asList()方法的参数必须是对象 list = Arrays.asList(array); // 使用list构造set Set set = new HashSet(Array.asList(array)); 4) 集合中赋值的方法 方法一:ArrayList<Integer> list2= new ArrayList<Integer>(list2);//利用集合自带的构造方法 方法二:ArrayList<Integer> num2 =(ArrayList<Integer>) list1.clone();//利用克隆的方法进行赋值 ArrayList list1=new ArrayList(); ArrayList list2=new ArrayList(); list1.addAll(list2); boolean Collection<E>.addAll(Collection<? extends E> c) 5) 为了方便的对Array对象,Collection对象进行操作,Java中提供了Arrays类和Collections类对其进行操作。 其中Arrays和Collections中所有的方法都为静态的,以方便直接传入对象引用,执行相应的功能。 十分常用的方法有: Arrays.asList(数组对象) //此静态方法用于将Array转化为List类型对象。常常用于List类型对象的初始化中。 // 值得注意的是collection对象.addAll(list对象),注意此处是collection对象而非Collections类 Collection.addAll(Collection对象,数组对象或可变参数列表 ) //该静态方法用于向一个已经存在的Collection中拼接数据 6) Util.Collections工具类 static <T> boolean addAll(Collection<? super T> c, T... a) // 要求目标集合已存有的元素数量多于源集合 static <T> void copy(List<? super T> dest, List<? extends T> src) static <T extends Comparable<? super T>> void sort(List<T> list) // String类实现 Comparable了接口 根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。 List<String> list1 = new ArrayList<String>(); Collections.addAll(list1, "5", "3", "2", "4"); Collections.sort(list1);<span style="white-space:pre"> </span> // 查询出所有的配置项 autoArchiveList = autoArchiveService.queryRequestType(new HashMap<String,Object>(), page); for (Map<String, Object> map : autoArchiveList) { for(Iterator<Map.Entry<String,Object>> ite = map.entrySet().iterator(); ite.hasNext();) { Map.Entry<String,Object> entry = (Map.Entry<String,Object>) ite.next(); if ("SERVICENAME".equalsIgnoreCase(entry.getKey()) && StringUtils.isEmpty((String)entry.getValue())) { archiveList4Temp.add(map); } } } // 如果非业务类别相关配置从autoArchiveList移除 autoArchiveList.removeAll(archiveList4Temp); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> if (dataSet != null ) { Object value = null; Map<String, Object> voMap = null; for (; dataSet.next(); list.add(voMap)) { voMap = new HashMap<String, Object>(); List columnNames = dataSet.getColumnNames(); String columnName; for (Iterator iterator = columnNames.iterator(); iterator.hasNext(); voMap.put(columnName, value)) { columnName = (String)iterator.next(); value = dataSet.getObject(c 4000 olumnName); } } }<span style="white-space:pre"> </span> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>public Map<String, Object> bulidQueryData() { ActionContext aCtx = ActionContext.getContext(); Map requestParamMap = aCtx.getParameters(); Map<String, Object> queryMap = new HashMap<String, Object>(); if (null == requestParamMap || requestParamMap.isEmpty()) { return queryMap; } for (Iterator<Entry> it = requestParamMap.entrySet().iterator(); it.hasNext(); ) { Entry entry = it.next(); String[] value = (String[])entry.getValue(); if ((null != value) && (value.length > 0)) { queryMap.put((String)entry.getKey(), value[0].trim()); } } return queryMap; }<span style="white-space:pre"> </span> // 注意格式,为每一行代码负责 public String getDictValue(String id,String dataDictId) { List<Value> categoryList = UIDataProvider.getCategoryListFromDataDictId(dataDictId); for(Value category:categoryList) { if(category.getId().equals(id)) { return category.getName(); } } return ""; } String SubLevel = getDictValue("1","QINGYUAN.HUAKE.EMP"); if ((condition1 && condition2) || (condition3 && condition4) || !(condition5 && condition6)) { doSomthingAoutIt(); } alpha = (aLongBooleanExpression) ? beta : gamma; for (initialization; condition; update) { statements; } 设法让你的程序结构符合目的 if (booleanException) { return true;else { return false;} 应该代之以如下方法:return booleanException; <span style="white-space:pre"> </span> 类似地: if (condition) {return x;}return y; 应该写为:return (condition ? x : y); <span style="white-space:pre"> </span>
相关文章推荐
- Java中数组和List集合如何互相转换。
- java 中集合和数组互相转换
- Java中数组和List集合如何互相转换。
- Java中数组和List集合如何互相转换
- java中数组和集合的互相转换
- Java中list集合的交集和差集的用法和如何将数组转换为集合的方法
- Java 图片与byte数组互相转换
- Java基础之集合转换为数组
- Java:集合与数组转换
- Java:集合与数组转换
- JAVA 集合List,数组,Set,Map,直接的相互转换
- java数组和集合之间的转换
- java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- 集合和数组互相转换
- JAVA 集合List,数组,Set,Map,直接的相互转换
- Java 集合与数组相互转换的方法
- Java中数组与集合的转换
- List类型与String数组、Set集合互相转换
- Java中数组与集合转换的注意事项