java集合框架为我们提供了一套性能优良,使用方便的接口和类,它们都位于java.util包中。
1.数组长度固定不变,不能很好地适应元素数量动态变化的情况。
2.可通过数组名.length获取数组的长度,却无法直接获取数组中真实存储的个数。
3.在进行频繁插入、删除操作时同样效率低下。
Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们都位于Java.util包中。
集合框架是为表示和操作集合而规定的一种统一的标准体系结构。
集合框架都包含三大块内容:
1.对外的接口
2.接口的实现
3.对集合运算的算法
1.接口:
List:ArrayList LinkedList
Map:Hashtable HashMap
扩容原理:int newCapacity = oldCapacity + (oldCapacity >> 1);
Java集合框架中的两大类接口:Collection和Map。
Collection又有两个子接口:List和Set。
Java集合框架共有三大类接口:List、Set和Map。
它们的共同点:都是集合接口,都可以用来存储很多对象。
它们的区别如下:
1.Colection接口存储一组不唯一(允许重复)、无序的对象。
2.Set接口继承Collection接口,存储一组唯一(不允许重复)、无序的对象。
3.List接口继承Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象。
4.Map接口存储一组成对的键-值对象,提供key到value的映射。Map中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
5.Iterator接口是负责定义访问和遍历元素的接口。
----List接口
实现List接口的常用类有ArrayList和LinkedList。它们都可以容纳所有类型的对象,包括null,允许重复,并且都保证元素的存储顺序。
1.ArrayList集合类
List接口中定义的各种常用方法:
boolean add(Object o) 在列表末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o) 在指定的索引位置添加元素,原索引位置及其后面的元素依次后移
注意:新添加元素的索引位置必须介于0和列表中元素个数之间
int size() 返回列表中的元素个数
Object get(int index) 返回指定索引位置处的元素
注意:取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o) 判断列表中是否存在指定元素
boolean remove(Object o) 从列表中删除元素
Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始
--ArrayList示例
List<Penguin> list=new ArrayList<Penguin>(); Penguin pe1=new Penguin("欧欧",2); Penguin pe2=new Penguin("拉拉",3); Penguin pe3=new Penguin("加加",4); list.add(pe1); list.add(pe2); list.add(pe3); System.out.println("有"+list.size()+"组信息"); for(Penguin pe:list) { pe.Pen(); } System.out.println("--------------------------------"); list.remove(pe1); for(Penguin pe:list) { pe.Pen(); }
ArrayList
以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。
---LinkedList集合类
LinkedList的一些特殊方法:
void addFirst(Object O) 在列表的首部添加元素
void addLast(Object O) 在列表的末尾添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的第一个元素
Object removeFirst() 删除并返回列表中的第一个元素
Object removeLast() 删除并返回列表中的第一个元素
--LinkedList示例
import java.util.List; import java.util.LinkedList;; public class MyLinked { public static void main(String[] args) { LinkedList<Dog> list=new LinkedList<Dog>(); Dog dog1=new Dog("欧欧",3,"男"); Dog dog2=new Dog("拉拉",4,"女"); Dog dog3=new Dog("雷欧",2,"男"); Dog dog4=new Dog("杰克",5,"女"); Dog dog5=new Dog("杰克",5,"男"); list.add(dog1); list.add(dog2); list.add(dog3); list.add(dog4); list.add(dog5); for(Dog dog:list) { dog.Realization(); } System.out.println("---------------------------------------------分割线"); list.addLast(dog4); list.addFirst(dog3); for(Dog dog:list) { dog.Realization(); } System.out.println("---------------------------------------------分割线"); list.removeLast(); list.removeFirst(); for(Dog dog:list) { dog.Realization(); }
---Map接口
1.HashMap集合类
Map的常用方法
Object put(Object key,Object value) 以"键-值对"的方式进行存储
Object get(Object key) 根据键返回相关联的值,若不存在指定的键,则返回 null
Object remove(Object key) 删除指定的键映射的"键-值对"
int size() 返回元素个数
Set keySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key) 若存在指定的键映射的"键-值对",则返回true
boolean isEmpty() 若不存在键-值映射关系,则返回true
void clear() 从此映射中移除所有映射关系
---Map示例
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.Iterator; public class Mymain_Map { public static void main(String[] args) { Map<Integer,String> map=new HashMap<Integer,String>(); map.put(1, "中国"); map.put(2, "美国"); map.put(3, "英国"); map.put(4, "日蹦"); System.out.println("--------------输出key和values----------------------"); System.out.println(map.keySet()); System.out.println(map.values()); System.out.println(map); System.out.println("----------------根据key--------------------"); for(Object o:map.keySet()) { System.out.print(o); System.out.println(map.get(o)); } System.out.println("------------------Set出key和value------------------"); Set <Entry<Integer,String>> enertSet=map.entrySet(); for(Entry<Integer,String>enert:enertSet) { System.out.print(enert.getKey()); System.out.println(enert.getValue()); } System.out.println("-------------------根据values-----------------"); for(Object o:map.values()) { String values=o.toString(); System.out.println(values); } System.out.println("----------------Iterator迭代器--------------------"); Set <Integer> key=map.keySet(); Iterator<Integer> it=key.iterator(); while(it.hasNext()) { Integer k=it.next(); System.out.print(k); System.out.println(map.get(k)); } System.out.println("----------------Iterator迭代器key和value--------------------"); Iterator <Entry<Integer,String>> Iterator=map.entrySet().iterator(); while(Iterator.hasNext()) { Entry<Integer,String> keys=Iterator.next(); System.out.print(keys.getKey()); System.out.println(keys.getValue()); } System.out.println("----------------数据清除--------------------"); map.clear(); if(map.isEmpty()) { System.out.println("数据清除"); }else { System.out.println("数据存在"); } } }