`
AutomaticThoughts
  • 浏览: 165451 次
社区版块
存档分类
最新评论

Collection框架

    博客分类:
  • Java
 
阅读更多

Collection框架

集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等.

集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等.

集合框架类似编程中经常用到的工具类,使得编码这专注于业务层的实现,不需要从底层实现相关细节—“数据结构的封装”和”典型算法的实现”.

1. Collection框架中实现比较要实现什么接口? Comparable/comparator

2. ArrayList和Vector的区别?

这两个类都实现了List接口,List接口继承了Collection接口,他们都是有序集合.即存储在这两个集合中的元素的位置都是由顺序的,相当于一种动态的数组,我们以后可以按位置索引号来取出某个元素,并且其中的数据是允许重复的.这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素.也不允许有重复的元素.本题目本与hashset没有任何关系,但为了说清楚ArrayList和Vector的功能,我们使用对比方式,有利于说明问题.

接着才说ArrayList与Vector的区别,主要包括两个方面:

(1)同步性

Vector是线程安全的,也就是说它的方法之间线程同步.而ArrayList是先程序不安全的,它的方法之间的线程数不同步的,如果只有一个线程会访问到集合,那么最好用ArrayList,因为它不考虑线程安全,效率会高些.如果有多个线程会访问到集合,那么就使用Vector,因为不需要我们自己去考虑和编写线程安全代码.

备注:对于Vector和ArrayList,Hashtable和HashMap,线程安全是前2个,记住Vector和Hashtable是旧的,是java一诞生就提供了的,他们是线程安全的.而Arratlist和HashMap是java2才提供的,他们是线程不安全的.

(2)数据增长

ArrayList和Vector都有一个初始的容量大小,但存储进他们里面的元素的个数超过了容量时,就需要增加ArrayList和Vector的存储空间,每次要增加时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间里同和程序效率之间要取得一定的平衡.Vector增长为原来的一倍,ArrayList增加原来的0.5倍.

3. HshMap和Hashtable的区别?

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许.总之有三条:

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

4. List和Map的区别?

一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,

List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

5、List, Set, Map是否继承自Collection接口?

List,Set是,Map不是

6.List、Map、Set三个接口,存取元素时,各有什么特点?

List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

1. 说出ArrayList,Vector,LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

4、去掉一个Vector集合中重复的元素

Vector newVector =new Vector();

For (inti=0;i<vector.size();i++)

{

Object obj =vector.get(i);

if(!newVector.contains(obj);

newVector.add(obj);

}

还有一种简单的方式,HashSet set = new HashSet(vector);

9、Collection和 Collections的区别。

  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

10.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

11.你所知道的集合类都有哪些?主要方法?

最常用的集合类是List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。

ArrayList/VectoràList

àCollection

HashSet/TreeSetàSet

PropetiesàHashTable

àMap

Treemap/HashMap

对于set,大概的方法是add,remove, contains;对于map,大概的方法就是put,remove,contains等,因为,我只要在eclispe下按点操作符,很自然的这些方法就出来了。我记住的一些思想就是List类会有get(int index)这样的方法,因为它可以按顺序取元素,而set类中没有get(int index)这样的方法。List和set都可以迭代出所有元素,迭代时先要得到一个iterator对象,所以,set和list类都有一个iterator方法,用于返回那个iterator对象。map可以返回三个集合,一个是返回所有的key的集合,另外一个返回的是所有value的集合,再一个返回的key和value组合成的EntrySet对象的集合,map也有get方法,参数是key,返回值是key对应的value。

12、两个对象值相同(x.equals(y)== true),但却可有不同的hashcode,这句话对不对?

对。

如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。

如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。

13、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

(应该是没有针对问题的确切的答案,当前的add方法放入的是哪个对象,就调用哪个对象的compareTo方法,至于这个compareTo方法怎么做,就看当前这个对象的类中是如何编写这个方法的)

实验代码:

public class Parent implements Comparable {

private int age = 0;

public Parent(int age){ this.age = age; }

public int compareTo(Objecto) {

System.out.println("method of parent");

Parento1 = (Parent)o;

return age>o1.age?1:age<o1.age?-1:0; }}

public class Child extends Parent {

public Child(){super(3); }

public int compareTo(Objecto) {

System.out.println("method of child");

// Childo1 = (Child)o;

return 1; }}

public class TreeSetTest {

public static void main(String[]args) {

TreeSetset = new TreeSet();

set.add(new Parent(3));

set.add(new Child());

set.add(new Parent(4));

System.out.println(set.size()); } }

分享到:
评论

相关推荐

    JAVA_Collection框架

    ### JAVA Collection框架详解 #### 一、概述 Java Collection框架 是 Java 核心库中一个重要的组成部分,它为集合类提供了一种通用的接口、实现以及算法。在 Java 开发过程中,我们经常会遇到需要处理一组对象的...

    collection框架

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了对数据进行组织和管理的工具。这个框架主要包括三个主要接口:List、Set和Map,它们分别代表有序的可重复元素集合、无序的不重复元素集合以及键值对的...

    Java基础知识-day02【Collection、泛型】.pdf

    本节课程主要讲解了 Java 中的 Collection 框架和泛型,涵盖了 Collection 的基本概念、Collection 框架的继承结构、Collection 的常用功能、迭代器的使用和泛型的定义等知识点。 Collection 框架是 Java 中提供的...

    day03-常用API&异常&Collection;.pdf

    根据上述内容,我们可以看出文档中涉及的知识点主要集中在Java的基础知识,包括数据类型转换、异常处理机制以及Collection框架的基本使用方法。对于学习Java语言的开发者来说,这些知识点是非常重要的基础内容,它们...

    Java集合类(Collection)学习

    在Java编程语言中,集合框架是处理对象组的重要工具,其中`Collection`是最基础的接口,它是所有集合类的根接口。在这个Java集合类的学习资料中,我们将深入探讨`Collection`以及与其相关的`TreeMap`、`Set`和`List`...

    Java中的Collection

    Java中的Collection框架是Java开发中不可或缺的部分,它提供了一组高效、灵活的数据结构,使得开发者可以方便地管理和操作数据。Collection接口是整个框架的基础,它定义了一组操作元素的基本操作,如添加、删除和...

    bada2.0培训_2_2_Base_Collection

    bada2.0作为该系统的一个版本,引入了一系列改进与新特性,尤其是对开发者友好的编程接口,其中就包括了Base Collection框架,它为开发者提供了处理数据集合的强大工具。 ### 1. Collections - 集合的概念 在bada...

    关于Java_Collection_API_

    在Java的Collection框架中,集合类被划分为两大类:线程安全集合类与非线程安全集合类。早期版本的集合类(如`Vector`和`Hashtable`)通过`synchronized`关键字实现线程安全,但在单线程环境下这种同步机制会显著...

    java实习周记

    本 Java 实习周记记录了作者在 Java 实习期间的学习经验和总结,涵盖了 Java 基础知识、Java 高级语法、Java 线程和 Collection 框架等方面的知识点。 一、Java 基础知识 * 类之间的关系:关联、聚合、继承、...

    (完整word版)java实习周记25篇.pdf

    本文总结了 Java 实习生的五周实习经历,涵盖了 Java 基础语法、高级语法、线程、I/O 和 Collection 框架等知识点。 第一周实习主要了解了公司背景、产品、发展方向等,同时熟悉了 Java 开发环境。实习生需要忘掉...

    day02_Collection、泛型每日作业卷2

    【知识点详解】 1. **集合框架**:Java 集合框架是一组接口...以上是对给定作业题目中涉及的Java Collection框架和泛型知识点的详细说明。通过理解和应用这些概念,可以有效地处理各种数据结构和操作,提高编程效率。

    集合框架包含collection和map的子类

    集合框架包含collection和map的子类。其中collection包含list、set和queue。map包括hashmap、hashtable和treemap

    计算机编程实习日志.docx

    从实习第一周的公司背景和产品了解到实习最后一周的Collection框架实践,涵盖了Java编程的基础语法、高级语法和高级应用。 在实习第一周,主要了解公司的背景、产品和发展方向,熟悉工作环境和Java编程的环境配置。...

    Java基础部分 Java代码查错算法与编程html&JavaScript&ajax部分面试题

    58、Collection框架中实现比较要实现什么接口 2 59、ArrayList和Vector的区别 2 60、HashMap和Hashtable的区别 2 61、List 和 Map 区别? 2 62、List, Set, Map是否继承自Collection接口? 2 63、List、Map、Set三个...

    Java容器框架 collection集合

    ### Java容器框架 Collection集合 #### 一、基本概念 Java容器类库主要目的是为了存储对象,根据不同的数据结构,可以将其划分为两个主要的概念:**Collection** 和 **Map**。 - **Collection**:这是一个单一...

    java实习周记.docx

    本文档记录了作者的java实习周记,涵盖了java基础知识、java高级语法、java高级应用、Collection框架等内容。下面是对每周实习内容的详细解释: 第一周实习 在第一周实习中,作者主要了解了公司的背景、产品、发展...

    Collections源码java-Java-Collection-:对Java的Collection框架源码阅读

    Java集合框架是Java编程语言中的一个核心特性,它为数据存储和操作提供了强大的支持。`Collections`类是这个框架的一部分,提供了对各种集合接口(如List、Set、Queue等)和实现类的操作方法。在这个源码阅读的过程...

    Java面试题基础篇

    面试题中有多道题目考察了Collection 框架的基础知识,例如Collection 框架的原理、Collection 框架的实现方式等。 10. 文件读写 文件读写是 Java 语言中的一种操作,用于对文件进行读写操作。面试题中有多道题目...

    java开发实习周记25篇.docx

    本资源摘要信息来自一份 java 开发实习周记,总共 25 篇,涵盖了 java 基础语法、java 高级语法、java 高级应用、Collection 框架等多方面的知识点。下面将对每周的实习内容进行详细的解释和分析。 第一周 在实习...

Global site tag (gtag.js) - Google Analytics