`
skwqy
  • 浏览: 50907 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

集合类的学习--Java1.0/1.1的集合类

阅读更多

1.Vector:用ArrayList代替Vector。

   (1). Vector中所有的方法都是同步的,所以用Vector来存取元素的话效率比较低. ArrayList方法不是同步的.

    (2).但有的时候,我们确实需要在多线程的情况下使用列表, 我们可以用Collections类中为我们提供的一个方法:public static <T> List<T> synchronizedList(List<T> list), 返回由指定列表支持的同步(线程安全的)列表。其它的Set, Map操作也是一样

2. Hashtable:用HashMap代替Hashtable。

    (1).Hashtable中的方法是同步的, HashMap中的方法不是同步的.

    (2).HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。

1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它们的实现也有很大的不同。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。

 

3.Satck:用LinkedList代替Stack。

    (1).Satck这个类在当初设计的时候就有一些潜在的问题, (Stack从Vector继承而来的public E elementAt(int index),不符合Stack数据结构特性, 所以我们不应该使用Stack这个类,如果我们需要Stack这种数据结构,我们可以自己编写一个(参考前面在介绍LinkedList的时, 用它来实现的栈这种数据结构))

4.Properties,属性类,从Hashtable继承而来,表示一个持久的属性集,存放字符串类型的键值对.

    (1).打印系统属性的一个例子

    import java.util.*;
    class PropTest
    {
         public static void main(String[] args)
         {
              Properties pps=System.getProperties();
              pps.list(System.out);
         }
    }

    (2).获取配置文件中键值对的例子

    import java.util.*;
    import java.io.*;
    class PropTest
    {
        public static void main(String[] args)
        {
             Properties pps=new Properties();
       try
       {
             pps.load(new FileInputStream("winsun.ini"));
             Enumeration enum=pps.propertyNames();
            while(enum.hasMoreElements())
           {
                String strKey=(String)enum.nextElement();
                String strValue=pps.getProperty(strKey);
    
               System.out.println(strKey+"="+strValue);
            }
      }
      catch(Exception e)
      {
            e.printStackTrace();
       }
      }
   }

4.枚举(Enumeration )

    (1). 枚举是一个接口, 在这个接口当中提供了两个方法

        i.boolean hasMoreElements() : 测试此枚举是否包含更多的元素

        ii: E nextElement()  :  如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

    (2),枚举的用法的迭代器很类似,先判断,然后获取下一个元素.(这种集合是1.0遗留下来的, 现在大多用Iterator,JAVA集合框架是在1.2以后才确定下来的)

 

1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

4.HashTable使用Enumeration,HashMap使用Iterator。

以上只是表面的不同,它们的实现也有很大的不同。

5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);

static int hash(Object x) {
  int h = x.hashCode();

  h += ~(h << 9);
  h ^= (h >>> 14);
  h += (h << 4);
  h ^= (h >>> 10);
  return h;
}
static int indexFor(int h, int length) {
  return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。

分享到:
评论

相关推荐

    jdom-1.1.zip_java jdom_jdom-1.0.jar包_jdom-1.1_jdom-1.1.1.tar.gz

    这个版本包含了`jdom-1.0.jar`包,它是JDOM 1.0的核心库文件,包含了所有必要的类和方法来处理XML。通过导入这个jar包,开发者可以在他们的项目中直接使用JDOM的功能,如读取XML文件、创建新的XML结构、修改现有XML...

    solr-mongo-import-1.0和1.1以及mongo-Java-driver

    版本1.0和1.1分别代表了这个工具的不同迭代,通常新版本会带来性能提升、功能增强或者修复已知问题。`solr-mongo-importer-1.1.0.jar`和`solr-mongo-importer-1.0.0.jar`就是这两个版本的实现,它们包含了导入过程所...

    solr-mongo-import-1.0和1.1

    JAR(Java Archive)是Java平台上的归档文件格式,用于集合多个类文件和其他资源,便于部署和分发Java应用或库。 在实际使用中,首先需要在Solr中配置MongoDB连接信息,包括MongoDB的主机名、端口、数据库名、集合...

    KAFKA-3.1.1-1.3.1.1.p0.2-el7.parcel

    标题中的“KAFKA-3.1.1-1.3.1.1.p0.2-el7.parcel”指的是Apache Kafka的一个特定版本的软件包,适用于Red Hat Enterprise Linux 7(RHEL 7)系统。这个版本是3.1.1,并且可能是某个特定发行版或修补版的1.3.1.1.p0.2...

    jaxen-1.1-beta-6.zip

    1. **引入Jaxen库**:首先,你需要将"jaxen-1.1-beta-6.jar"添加到你的项目类路径中,这可以通过构建工具(如Maven或Gradle)或者手动设置实现。 2. **创建XPath对象**:使用`XPathFactory`创建一个`XPath`实例,`...

    springMVC框架搭建及详解

    - `commons-collections-3.1`:提供额外的集合类和算法。 - `dom4j-1.6.1.jar`:XML解析库。 - `javassist-3.12.0.GA.jar`:字节码操作库,用于动态创建类。 - `jta-1.1.jar`:事务管理接口,实现分布式事务。 - `...

    Java体系结构介绍

    - **Java 1.0**:第一个公开发布的版本,包含8个包,212个类。 - **Java 1.1**:已过时。 - **Java 2 (1.2)**:改名后的版本,包含59个包,1520个类。 - **Java 1.3, 1.3.1**:主要是对Java 2的一些bug进行修复。 - ...

    JDK1.1-Documentation(EN)

    2. **集合框架**:虽然 JDK 1.2 才完整引入了集合框架,但 JDK 1.1 已经引入了 `Vector` 和 `Stack` 类,它们是后来的 `ArrayList` 和 `LinkedList` 的前身,为存储和操作对象数组提供了便利。 3. **接口**:JDK ...

    commons-beanutils所有版本(1.0-1.9.2).zip

    1. **JavaBeans**: JavaBeans是一种符合特定规范的Java类,通常用于构建组件或GUI应用程序。它们具有可设置的属性、构造方法和事件处理方法。BeanUtils库主要就是为了方便地操作这些JavaBeans的属性。 2. **属性...

    fine-plugin-com.fr.plugin.reset.userpasswd-1.0.zip

    在Java编程环境中,JAR(Java Archive)文件是一种打包格式,用于集合多个类文件、相关的元数据以及资源文件。在这个插件的JAR文件中,开发者可能定义了接口、类、方法等,用于处理用户身份验证、密码加密解密、...

    java学习笔记 良格格

    - 学习 Java 语法的基本结构和规则,如变量、控制流语句、类和对象等。 - 实践基本的 Java SE API,包括字符串处理、异常处理、集合框架、I/O 操作、多线程等。 - 参考官方文档:...

    JAVA编码规范文档整合阿里巴巴Java开发规范手册

    **JAVA编码规范文档整合阿里巴巴Java开发规范手册** **1. 概览** 在软件开发过程中,遵循统一的编码规范是确保代码质量、可读性和团队协作效率的关键。阿里巴巴的Java开发规范提供了一套完整的指导原则,旨在提升...

    java资料---Java SE.ppt

    随着版本的升级,JDK 1.1引入了JIT编译器,提高了性能,JDK 1.2则将Java技术划分为J2SE(Java标准版)、J2EE(Java企业版)和J2ME(Java微型版),并引入Swing组件库。JDK 1.3和1.4进一步增强了功能,如JNDI、JNI和...

    Jersey和Tomcat构建RESTful WebService

    其中`&lt;init-param&gt;`用于指定包含资源类的Java包名,而`&lt;url-pattern&gt;`则指定了Jersey servlet处理的所有URL模式。 通过这种方式,您就可以使用Eclipse和Tomcat构建并部署简单的RESTful Web服务了。接下来,您可以...

    cldc1.0a规范

    开发者需要使用轻量级的API来实现功能,例如使用`javax.microedition.io`包进行网络通信,`java.util`包的有限集合类等。 **四、开发与部署** 1. **开发工具**:早期的J2ME开发通常使用Sun Microsystems提供的...

    Java发展史_&_Java9、10新特性

    - **1995年:Java 1.0** - 发布时间:1996年1月23日 - 代号:Oak - 类或接口数量:211 - 主要新特性或功能: - 纯解释执行的Java虚拟机(Sun Classic VM) - Applet - AWT - **1997年:Java 1.1** - 类或...

    java2

    - **Java 2(J2SE 1.2、1.3、1.4)**:这个阶段的Java增加了大量的新特性,如Swing GUI组件库、集合框架等。 - **Java 5**:引入了泛型、枚举、注解等重要的语言特性。 - **Java 6**:增强了图形处理能力和安全性。 ...

    Java基础教程.md.pdf

    ##### 9.6 Java集合工具类:Collections - 提供静态方法对集合进行操作。 #### 10. Java常用类 ##### 10.1 System类 - 包含系统相关的操作方法。 ##### 10.2 Runtime类 - 提供了与当前Java应用的运行时系统相连接...

    Head First Java, Second Edition【中英对照】.pdf

    - **内容概述**:此描述简略,但从标题可以推测本书主要内容包括Java基础知识、面向对象编程、图形用户界面开发、异常处理、集合框架、多线程、网络编程等。 ### 部分内容示例解析: #### 1. Write Once, Run ...

Global site tag (gtag.js) - Google Analytics