数组,collection,map的定义,原理,用法,区别等。
■ 数组
1.相同数据类型的元素组成的集合
2.元素按现行顺序排列。所有元素通过下标做表示来访问。
3.数组创建后大小不能改变。
4.扩容,其实就是创建一个更大的新数组并将原有数组的内容复制到其中
5.数组名.lenth即数组元素的个数,元素下标0~lenth-1
6.排序方法:插入排序,冒泡排序,快速排序
■ 集合Collection(interface)
1.两个实现接口list(可重复集),set(不可重复集)
2.用来存储对象(特定数据结果)的容器。
3.是否重复是根据equals()的比较结果判断的
4.集合的存储方式:集合存储的都是引用类型元素,集合只保存每个元素对象的引用,并非将元素对象本身存入集合。
5.迭代器(Iterator):用于遍历集合元素
- boolean hasNext(); 判断集合是否还有元素可以遍历。
- E next(); 返回迭代的下一个元素。
- void remove(); 迭代后才可以删除,而且要使用Iterator的remove方法!
list的实现类(arrayList,LinkedList):可重复集
6.泛型:java SE 5.0引入
泛型的本质是参数化类型。指定放入集合中元素的类型。
java编译器会根据泛型进行类型检查,以减少代码在运行时出现错误的可能性。
Collection - List
1.list接口是Collection的子接口。用于定义线性表数据结构。
相当于存放对象的数组,只是元素的个数可以动态的增加减少。
2.实现类:ArrayList,LinkedList,Vector
2.1 ArrayList
1.非线程安全
2.基于对象数组
3.在查询(get)、遍历(iterator)、修改(set)使用的比较多的情况下,用ArrayList
4.list->数组: 类型[] toArray();
数组->list: static <T> List <T> asList <T...a> :此集合不能进行增删操作,对集合元素的修改会影响到原数组对应的元素
5.队列(Queue):只能从线性表的一端添加(offer),另一端取出(poll)。即,先入先出
2.2 LinkedList
1.非线程安全
2.基于环形双向链表
3.在增加(add)、删除(remove)使用比较多的情况下,用LinkedList
4.队列(Queue):队列常进行add或remove时,由LinkedList实现,效率高
5.栈(Deque):Queue的子接口,双端队列,LinkedList实现。限定仅能从一端进出,即为栈,先入后出
2.3 Vector
1.线程安全
2.扩容机制与ArryList不同
3.需要线程安全而且对效率要求比较低的情况下,使用Vector
Collection - set
3.1 HashSet
重写equals()和hashcode()方法
3.2 TreeSet
自然排序,或根据Comparator进行排序
■ Map
查询表,用于存储“Key - Value”映射对。Key是Value的索引,Key的对象在集合中不可以重复。
1.根据内部数据结构不同,Map接口有多种实现类。
1.1.内部为hash表实现的HashMap
1.2.内部为排序二叉数实现的TreeMap