`
bruce.lu
  • 浏览: 33906 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

讨论Java的数组和集合操作

    博客分类:
  • Java
阅读更多

很简单的数组和集合操作. 在打印出结果之前, 请先预料一下, 注意一下注释和代码中红色的部分. 欢迎给出您的看法.  谢谢!   

java 代码
  1. public static void main(String[] args) {   
  2.         LabelValueBean[] lvBeans = new LabelValueBean[3];   
  3.         lvBeans[0] = new LabelValueBean("l0","v0");   
  4.         lvBeans[1] = new LabelValueBean("l1","v1");   
  5.         lvBeans[2] = new LabelValueBean("l2","v2");   
  6.            
  7.         Map<String, LabelValueBean> arrMap = new HashMap<String, LabelValueBean>();   
  8.            
  9.         arrMap.put("lv0", lvBeans[0]);   
  10.         arrMap.put("lv1", lvBeans[1]);   
  11.         arrMap.put("lv2", lvBeans[2]);   
  12.            
  13.         for(int i = 0;i < lvBeans.length;i ++) {   
  14.             logInfo("before: " + lvBeans[i].getLabel());   
  15.         }   
  16.   
  17.    /**  
  18.      *Collection 的 Object[] toArray() 方法有这样的注释:(注意加粗部分)  
  19.      *  
  20.      * Returns an array containing all of the elements in this collection.  If  
  21.      * the collection makes any guarantees as to what order its elements are  
  22.      * returned by its iterator, this method must return the elements in the  
  23.      * same order.<p>  
  24.      *  
  25.      * The returned array will be "safe" in that no references to it are  
  26.      * maintained by this collection.  (In other words, this method must  
  27.      * allocate a new array even if this collection is backed by an array).  
  28.      * The caller is thus free to modify the returned array.<p>  
  29.      *  
  30.      * This method acts as bridge between array-based and collection-based  
  31.      * APIs.  
  32.      *  
  33.      * @return an array containing all of the elements in this collection  
  34.      */  
  35.        
  36.   
  37.         Object[] lv1 = (Object[]) arrMap.values().toArray();   
  38.   
  39.         for(int i = 0;i < lv1.length;i ++) {   
  40.             LabelValueBean lv = (LabelValueBean)lv1[i];   
  41.             lv.setLabel("++");   
  42.             logInfo("Modifying: " + lv.getLabel());   
  43.         }   
  44.   
  45.         for(int i = 0;i < lvBeans.length;i ++) {   
  46.             logInfo("after: " + lvBeans[i].getLabel());   
  47.         }   
  48.     }   
  49.   
  50.     public static void logInfo(String str) {   
  51.         System.out.println("-----Info:\n " + str);   
  52.     }   

 

另: LabelValueBean 定义

java 代码
  1. public class LabelValueBean {   
  2.     private String label;   
  3.     private String value;   
  4.        
  5.     public LabelValueBean() {   
  6.            
  7.     }   
  8.        
  9.     public LabelValueBean(String label, String value) {   
  10.         this.label = label;   
  11.         this.value = value;   
  12.     }   
  13.   
  14.     public String getLabel() {   
  15.         return label;   
  16.     }   
  17.   
  18.     public void setLabel(String label) {   
  19.         this.label = label;   
  20.     }   
  21.   
  22.     public String getValue() {   
  23.         return value;   
  24.     }   
  25.   
  26.     public void setValue(String value) {   
  27.         this.value = value;   
  28.     }   
  29.   
  30. }  
分享到:
评论
4 楼 lijie250 2007-07-13  
呵呵发个调试出来的图片!
3 楼 simohayha 2007-07-13  
呵呵,看看她的源码不就行了.

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代码这些就更一目了然了.

2 楼 bruce.lu 2007-07-13  
Qieqie 写道
打印出*改变后*的输出。


注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。

总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。

-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。


Thanks a lot!
1 楼 Qieqie 2007-07-13  
打印出*改变后*的输出。


注释中所说的,
array安全,是指该array是一个copy(也就是,如果实际集合采用array实现,不能直接返回集合中的那个array,而应该重新创建,否则就是不安全的),不是指array中的元素是原元素的copy。

总之:
modify array,是指改变Array中的元素顺序,值类型数据,清空等等
相反的,仅仅改变array中的ref目标数据,不算改变array。

-------------
呵呵,让我想到了hibernate的关联缓存和对象缓存的问题,所以回复。

相关推荐

    java 数组求和计算

    以上内容涵盖了Java数组求和计算的基本知识以及相关的扩展话题。理解并掌握这些知识点对于进行有效的Java编程至关重要。在实际应用中,根据具体需求,可能还需要考虑性能优化、异常处理等方面的问题。

    java-对象数组转换为json

    在IT领域,特别是Java编程中,对象数组与JSON之间的转换是一项常见且重要的操作。下面将深入探讨如何在Java中实现对象数组向JSON的转换,并反过来将JSON字符串转换为Java对象数组,同时也会提及一些相关技术和代码...

    java数组使用视频教程

    Java数组是程序设计中基础且重要的数据结构,它允许存储同一类型的数据集合。在这个“Java数组使用视频教程”中,我们将深入理解数组的内存管理、元素的创建与使用。 首先,我们来探讨“一维数组内存分析”。在Java...

    java源码:Java数组倒置.zip

    在Java编程语言中,数组是...通过学习和分析这些源代码,你可以更深入地理解Java数组操作,提高编程技巧,同时也能锻炼解决问题的能力。在实践中,数组倒置的技巧可能会被应用到各种数据结构和算法中,如排序、搜索等。

    java数组,xmind,pdf,作业.zip

    Java数组是一种特殊的数据结构,它允许我们存储相同类型的多...总之,这个压缩包提供了一个全面了解和学习Java数组的资源集合,涵盖了从基础知识到高级算法的多个层面,适合初学者和有一定经验的开发者进行复习和提高。

    JAVA 对象数组按照多个属性进行排序

    本文将深入探讨如何在Java中实现这个功能,结合给出的标签“源码”和“工具”,我们将讨论标准库中的`Comparator`接口和`Collections.sort()`方法,以及自定义比较逻辑。 首先,了解Java中的`Comparable`和`...

    JAVA数组,可以简便的观看数组、

    在Java编程语言中,数组是一种特殊的数据结构,用于存储同类型的数据集合。本章主要讨论了一维数组的声明、创建、初始化以及引用等基础知识。 6.1 一维数组 一维数组在Java中被定义为一个独立的对象,不同于其他...

    java判定数组或集合是否存在某个元素的实例

    这通过调用`removeAll()`方法实现,可以有效地分离出存在于模板集合和不存在于模板集合的元素。 总的来说,判断数组或集合中是否存在特定元素是Java开发中常见的任务。对于数组,排序后的二分查找是最高效的方式;...

    java 数组、for循环、dowhile实例代码

    以上就是关于Java数组、for循环和do-while循环的基础知识以及如何在实际编程中应用它们。掌握这些基础知识对任何Java开发者来说都是至关重要的,因为它们构成了更复杂算法和数据结构的基础。通过实践和不断练习,你...

    java数组、泛型、集合在多态中的使用及对比

    Java编程语言中,数组、泛型和集合是重要的数据组织工具,它们都在多态环境中有着广泛的应用。本文将深入探讨这三个概念在多态中的使用方式以及它们之间的对比。 首先,我们来看**数组**在多态中的应用。在Java中,...

    数组集合的原理实现

    然而,数组的插入和删除操作效率较低,因为在调整元素位置时可能需要移动大量数据。数组的大小在创建时必须预先确定,并且在运行过程中无法改变,这限制了它的灵活性。 接下来,我们讨论链表。链表也是一种线性数据...

    数组的扩容和链表结构.zip

    本压缩包文件"数组的扩容和链表结构.zip"包含了关于Java数组扩容和链表结构存储的相关知识点,我们将详细探讨这两个主题。 首先,我们来看Java数组。数组是一种线性数据结构,它在内存中连续存储相同类型的数据元素...

    Java调用带参数的存储过程并返回集合

    在处理数组参数时,Oracle提供了PL/SQL TABLE类型的参数,Java可以通过数组或Java Collection类型传递。在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。...

    java【第4章:数组与方法】_方法的声明及使用

    它们允许我们以单一变量名来访问和操作一组相关的值。例如,你可以创建一个整数数组,用来存储学生的成绩。声明数组的基本语法如下: ```java int[] 数组名 = new int[大小]; ``` 这里的`大小`是你想要的数组元素...

    java实现数组实例化一个类

    ### Java 实现数组实例化一个类 在Java编程中,我们经常会遇到需要创建多个具有相同属性的对象的情况。本文将详细探讨如何使用Java语言创建一个`Student`类,并通过数组来实例化该类的对象。 #### 创建 Student 类...

    accp5.0java第八章 数组

    通过学习“accp5.0 Java第八章 数组”,开发者能够熟练掌握数组的基本概念和操作,为后续的Java编程打下坚实的基础。在实际开发中,数组被广泛应用于数据存储和处理,是解决问题的关键工具之一。希望大家能积极参与...

    JAVA类与对象及数组习题及答案.pdf

    在本段内容中,我们将会讨论Java编程语言的基础知识点,包括类和对象的使用、基本数据类型、数组、方法的定义和调用等。 首先,我们来看看关于Java的类、对象以及数组的概念。Java是一种面向对象的编程语言,它的...

    Java对象的容纳 数组。容器

    在Java编程中,对象的容纳主要分为两种方式:数组和容器。这里我们将详细讨论这两种方式。 **一、数组** 数组是一种基础的存储结构,它允许我们存储相同类型的对象引用。在Java中,数组的创建和使用可以通过以下...

    java 对象集合小例子.

    本篇文章将深入探讨Java中的几个主要对象集合:Hashtable、Vector、LinkedList以及数组和集合的基本概念。 首先,让我们来看Java中的`Hashtable`。Hashtable是Java早期版本中的一个同步容器类,它继承自Dictionary...

    实验05 Java集合.doc

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...

Global site tag (gtag.js) - Google Analytics