集合类
为什么会出现集合类?
面向对象语言对事物的体现就是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合就是存储对象的最常用的一种方式。
数组和集合为什么不同?
数组虽然也可以存储对象,但长度是固定的,集合的长度是可以变的,数组中可以存储基本数据类型,但集合只能存储对象。
---List
List 特点是存入对象是有序的,即存入什么顺序,取出来就会是什么顺序。而且里面的元素是可以重复的。
List按照其底层数据存储形式可以分为ArrayList和LinkedList。前者是以级数为存储方式后者以链表为存储方式,显示前者
适合检索遍历,后者适合增加删除。
---Set
Set的特点是不包含重复元素,而且是无序的。
HashSet是底层使用哈稀表为存储方式实现的Set集合。HashSet给存入的每个对象计算出一个Hash值,然后映射出一个存储地
址。这样很容易判断出某个对象是否已经存在。试想如果用ArrayList保证对象重复会有多么麻烦。假如集合中有1万个对象,当添加
10001个对象时,需要进行10000次比较才能最后确定这个对象是否已经存在,如果存在,就不加入,如果不存在就添加进去。由
此可见HashSet在这方面的优越性。当我们的对象需要存储到HashSet中时,通常我们需要重写hashCode方法和equals方法,以
我自己的规则判断两个对象是否相等。比如,在某种特定的情况下,我们可以设定姓名和年龄都相等的两个人就是同一个人。
HashSet是非线程同步的!
TreeSet 该集合可以对Set集合中的元素进行排序,底层是使用二叉树作为数据结构。排序性能比较高!
排序的两种实现方式:
1、元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然顺序,或默认顺序。
2、让集合具备排序能力。在创建集合的时候传入一个自定义比较器,自定义比较器要实现Comparator接口。这样就使得添加元素时集合
都会按照比较器里的要求将每次添加进的元素放到适当的位置,也就是实现的排序。
三、Map
Map是一种与Collection不同的集合,是以key/value的形式存在的。通过key找到对应的value,key就像身份证号一样需要唯一确定。
HashTable 底层是Hash表数据结构,不可以存入null作为键和null作为值的情况。Hashtable是线程同步的。jdk1.0 开始 效率低
HashMap 底导是hash表数据结构, 并允许使用null作为键和null作为值,不是线程同步的。jdk1.2开始 效率高
TreeMap 底层是二叉树作为数据结构,线程不同步,可以用于map集合中的按键排序
Set和Map很像,其实Set底层使用了Map集合
Map集合的取出原理:将map集合取出原理,将map集合转成Set集合,再通过迭代器取出。记住keySet和EntrySet方法的使用!
Map的应用-------------利用Properties类读取配置文件(框架中经常用到)
InputStream in = ReflectCollections.class.getResourceAsStream("config.properties");
Properties prop = new Properties();
prop.load(in);