2007-07-13
讨论Java的数组和集合操作
关键字: Java 数组 集合很简单的数组和集合操作. 在打印出结果之前, 请先预料一下, 注意一下注释和代码中红色的部分. 欢迎给出您的看法. 谢谢!
java 代码
- public static void main(String[] args) {
- LabelValueBean[] lvBeans = new LabelValueBean[3];
- lvBeans[0] = new LabelValueBean("l0","v0");
- lvBeans[1] = new LabelValueBean("l1","v1");
- lvBeans[2] = new LabelValueBean("l2","v2");
- Map<String, LabelValueBean> arrMap = new HashMap<String, LabelValueBean>();
- arrMap.put("lv0", lvBeans[0]);
- arrMap.put("lv1", lvBeans[1]);
- arrMap.put("lv2", lvBeans[2]);
- for(int i = 0;i < lvBeans.length;i ++) {
- logInfo("before: " + lvBeans[i].getLabel());
- }
- /**
- *Collection 的 Object[] toArray() 方法有这样的注释:(注意加粗部分)
- *
- * Returns an array containing all of the elements in this collection. If
- * the collection makes any guarantees as to what order its elements are
- * returned by its iterator, this method must return the elements in the
- * same order.<p>
- *
- * The returned array will be "safe" in that no references to it are
- * maintained by this collection. (In other words, this method must
- * allocate a new array even if this collection is backed by an array).
- * The caller is thus free to modify the returned array.<p>
- *
- * This method acts as bridge between array-based and collection-based
- * APIs.
- *
- * @return an array containing all of the elements in this collection
- */
- Object[] lv1 = (Object[]) arrMap.values().toArray();
- for(int i = 0;i < lv1.length;i ++) {
- LabelValueBean lv = (LabelValueBean)lv1[i];
- lv.setLabel("++");
- logInfo("Modifying: " + lv.getLabel());
- }
- for(int i = 0;i < lvBeans.length;i ++) {
- logInfo("after: " + lvBeans[i].getLabel());
- }
- }
- public static void logInfo(String str) {
- System.out.println("-----Info:\n " + str);
- }
另: LabelValueBean 定义
java 代码
- public class LabelValueBean {
- private String label;
- private String value;
- public LabelValueBean() {
- }
- public LabelValueBean(String label, String value) {
- this.label = label;
- this.value = value;
- }
- public String getLabel() {
- return label;
- }
- public void setLabel(String label) {
- this.label = label;
- }
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- }
评论
lijie250
2007-07-13
呵呵发个调试出来的图片!
simohayha
2007-07-13
呵呵,看看她的源码不就行了.
arraycopy的c代码我找了半天没找到,郁闷,不知道谁熟悉jvm源码的结构的,能告诉俺一下。
这里注释是指返回的数组将会是安全的,因为集合没有维持对它的引用。而是直接通过arraycopy copy了一个新数组。如果能看到arraycopy的c代码这些就更一目了然了.
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class)
? (T[]) new Object[newLength]
: (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
arraycopy的c代码我找了半天没找到,郁闷,不知道谁熟悉jvm源码的结构的,能告诉俺一下。
这里注释是指返回的数组将会是安全的,因为集合没有维持对它的引用。而是直接通过arraycopy copy了一个新数组。如果能看到arraycopy的c代码这些就更一目了然了.
bruce.lu
2007-07-13
Qieqie 写道
打印出*改变后*的输出。
注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。
总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。
-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。
注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。
总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。
-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。
Thanks a lot!
Qieqie
2007-07-13
打印出*改变后*的输出。
注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。
总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。
-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。
注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。
总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。
-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 4893 次
- 性别:

- 来自: 大连

- 详细资料
搜索本博客
最新评论
-
讨论Java的数组和集合操作
呵呵发个调试出来的图片!
-- by lijie250 -
讨论Java的数组和集合操作
呵呵,看看她的源码不就行了. public Object[] toArra ...
-- by simohayha -
讨论Java的数组和集合操作
Qieqie 写道打印出*改变后*的输出。 注释中所说的, array安全, ...
-- by bruce.lu -
讨论Java的数组和集合操作
打印出*改变后*的输出。 注释中所说的, array安全,是指该array是 ...
-- by Qieqie -
献给 Ruby on Rails
哈哈,说的有趣。
-- by ouspec






评论排行榜