黑马程序员技术交流社区

标题: java集合总结三 [打印本页]

作者: 不常来多担待    时间: 2016-12-3 22:43
标题: java集合总结三
总结三:java集合总结

一、数组、集合

数组、集合:都是一种容器,用一个对象管理多个对象;

数组:不能自动增长;只能存放同类型的元素

集合:能自动扩容;部分集合允许存放不同类型的元素;

二、学习这些集合类要掌握哪些东西:

1)怎样得到(选择)集合对象;

2)怎样添加元素

3)怎样删除元素

4)怎样循环遍历没一个元素

三、list、set、map

collection:父接口;

Set:接口---一个实现类:HashSet

List:接口---三个实现类:LinkedList,Vector,ArrayList

SortedSet:接口---实现类:TreeSet

1、List:

List:有序列表,允许存放重复的元素;

实现类:

ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;下标也是从0开始;

LinkedList:链表实现,增删快,查询慢

Vector:数组实现,线程安全,重量级

2.Set:

无序集合,不允许存放重复的元素;

实现类HashSet:equals返回true,hashCode返回相同的整数;哈希表;

子接口SortedSet:对Set排序实现类:TreeSet:二叉树实现的;

看API:<E>泛型:表示一个对象;

Iterator:接口,迭代器;

java.util;

hasNext();

next();

remove();

Iterable:可迭代的,访问的;

java.lang;实现了可迭代的接口就可以用迭代的方式访问;

只需实现iterator();方法即可;Iteratoriterator();

三种循环的访问方式:

只有实现了Iterable接口的才能用第三种;能用第二种的也一定能用第三种;

ArrayList:自动扩容,是数组照搬过来的;

3.Map

HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;

HashSet的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;

如果有两个Key重复,那么会覆盖之前的;

Hashtable:线程安全的

Properties:java.util.Properties;key和value都是String类型,用来读配置文件;

HashMap与Hashtable区别:

HashMap线程不安全的,允许null作为key或value;

Hashtable线程安全的,不允许null作为key或value;

TreeMap:对key排好序的Map;key就是TreeSet,value对应每个key;

key要实现Comparable接口或TreeMap有自己的构造器;

HashSet:remove(Objecto)的原则看这个对象O的Hashcode和equals是否相等,并不是看是不是一个对象;

定义一个Map;key是课程名称,value是Integer表示选课人数;

map.put(cou,map.get(cou)+newInteger(1));

四、Hashtable、Properties

1,Hashtable:实现了Map接口,此类实现一个哈希表,作用和HashMap相同。任何非null对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals法。

2,Properties:继承自Hashtable,比Hashtable更严格属性列表中每个键及其对应值都是一个字符串。

常用方法StringgetProperty(String?key)和setProperty(Stringkey,Stringvalue);

用法:我在C盘下建了一个名为yy.dat的文件,文件的内容为:

name=hehe

password=12345

执行以下程序,输出hehe,可见用Properties可以很方便的解析配置文件

Propertiesp=newProperties();

p.load(newFileInputStream("C:\\yy.dat"));

System.out.println(p.getProperty("name"))

五、两个工具类Arrays和Collections

1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂

2.Collections、主要提供了在collection上进行操作的静态方法

六、遗留的几个类

1.Hashtable,作用和HashMap相同,不过它是线程安全的,如果不需要线程安全,应该使用HashMap

2.Enumeration,遗留集合使用枚举接口来遍历元素,它有两个方法,hasMoreElements和nextElement,用法类似Iterator。

3.Stack,继承自Vector,实现了栈的功能,提供了push()方法押栈和pop()方法出栈。

4.BitSet,位集。如果需要高效率的存储一个位序列,例如一个标志序列,请使用位集。它可以对各个位进行

读取get(i)

设置set(i)

清楚clear(i)

七、常见笔试题目汇总

1.Collection和Collections的区别。

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

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

2.List,Set,Map是否继承自Collection接口?

List,Set是,Map不是

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

不对,有相同的hashcode。

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

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

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

5.排序都有哪几种方法?请列举。用JAVA实现一个快速排序。

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。

//使用快速排序方法对a[0:n-1]排序

从a[0:n-1]中选择一个元素作为middle,该元素为支点

把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点

递归地使用快速排序方法对left进行排序

递归地使用快速排序方法对right进行排序

所得结果为left+middle+right

6.HashMap和Hashtable的区别

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap类没有分类或者排序。它允许一个null键和多个null值。

Hashtable类似于HashMap,但是不允许null键和null值。它也比HashMap慢,因为它是同步的。

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

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。

equals()是判读两个Set是否相等。

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2