集合框架(一)
集合框架
什么是集合
集合相当于一个容器里面可以存放若干个元素,那与数组有什么区别呢?
①数组中长度是固定的,因为底层使用final来修饰,而集合是可以进行扩容的。
②数组只能存放一种数据类型,对于其它类型是无法存放的。
③集合它是一个类里面有大量的方法,比如:添加元素,删除元素,修改元素,查询元素等。
集合框架种类
Collection接口
collection接口下有两个接口为Set和List
①Set特点是无序不重复的,它的实现类有ArrayList和LinkedList
②List特点是有序可重复的,它的实现类有HashSet和TreeSet
ArrayList实现类
ArrayList底层是实现基于动态数组数据结构。一个ArrayList集合是存储在一块连续的内存中的。
优点:ArrayList查询和修改效率很高。
缺点:ArrayList删除和添加效率很低。
创建ArrayList的语法:
语法:
①ArrayList 名称=new ArrayList()
②ArrayList 名称=new ArrayList(初始化容量数)
举个例子:
1 public class Test { 2 public static void main(String[] args) { 3 //调用ArrayList中的无参构造器,如果不传入数组长度,默认为10个 4 ArrayList list=new ArrayList(); 5 //可以传入数字,确定数组的长度 6 ArrayList list1=new ArrayList(15); 7 8 } 9 }
ArrayList类提供大量方法
添加操作
语法:
①boolean add(Object o):添加元素
②void add(int index , Object ele):在指定位置添加元素
举个例子:
1 public class Test { 2 public static void main(String[] args) { 3 //调用ArrayList中的无参构造器,如果不传入数组长度,默认为10个 4 ArrayList list=new ArrayList(); 5 //list 可以添加任意类型的数据 6 list.add("张三"); 7 list.add(12); 8 list.add(true); 9 list.add(12.83); 10 } 11 }
删除操作
语法:
①Element remove(int index):删除指定位置的元素并返回
②Object remove(Object 0): 删除指定元素的第一次出现(如果存在)
举个例子:
1 public class Test { 2 public static void main(String[] args) { 3 //调用ArrayList中的无参构造器,如果不传入数组长度,默认为10个 4 ArrayList list=new ArrayList(); 5 //根据索引删除元素 6 list.remove(2); 7 //根据删除指定元素第一次出现 8 list.remove(12.6); 9 } 10 }
修改操作
语法:
Element set(int index, E element): 用指定的元素替换此列表中指定位置的元素。
举个例子:
1 public class Test { 2 public static void main(String[] args) { 3 //创建arraylist集合 4 ArrayList list=new ArrayList(); 5 //通过索引位置修改内容 6 list.set(1,"星期四"); 7 } 8 }
查询操作
语法:
Element get(int index):查询指定索引位置上的元素
举个例子:
1 public class Test { 2 public static void main(String[] args) { 3 //创建arraylist集合 4 ArrayList list=new ArrayList(); 5 //添加元素 6 list.add("张三"); 7 list.add(12); 8 list.add(12.3); 9 list.add('c'); 10 list.add(true); 11 //查询元素信息 12 list.get(1); 13 list.get(3); 14 } 15 }
LinkedList实现类
LinkedList底层使用双链表,双链表它存储的空间是不连续的,通过指针实现逻辑上的连续。
优点:LinkedList删除和增加的操作效率很高。
缺点:LinkedList查询和修改的操作效率很低。
创建LinkedList的语法:
语法:
LinkedList 名称=new LinkedList()
举个例子:
1 public class Test2 { 2 public static void main(String[] args) { 3 //创建一个无参的LinkedList对象 4 LinkedList list=new LinkedList(); 5 } 6 }
LinkedList提供大量的方法
添加操作
语法:
①void addFirst(E e):在该列表开头插入指定的元素
②void addLast(E e):将指定的元素追加到此列表的末尾
③void add(E e):在该列表的尾部追加元素
④void add(int index , E e):在指定位置上添加元素
④void addAll(Collection col):将集合元素添加到列表中
⑤void addAll(int index , Collection col):将指定位置上添加集合
举个例子:
1 public class Test2 { 2 public static void main(String[] args) { 3 //创建一个无参的LinkedList对象 4 LinkedList list=new LinkedList(); 5 //在链表的尾部追加 6 list.add(12); 7 //在指定位置上添加元素 8 list.add(0,1); 9 //在头部链表上添加元素 10 list.addFirst(45); 11 //在链表的尾部追加元素 12 list.addLast(39); 13 Collection collection=new ArrayList(); 14 //将其它的集合添加到链表中 15 list.addAll(collection); 16 //在指定位置上添加集合内容 17 list.addAll(2,collection); 18 } 19 }
删除操作
语法:
①boolean remove(Object o):删除第一次出现的元素
②boolean removeFirst():删除第一个元素
③boolean remove(int index):根据索引位置删除指定元素
④boolean removeLast():删除尾部的元素
举个例子:
1 public class Test2 { 2 public static void main(String[] args) { 3 //创建一个无参的LinkedList对象 4 LinkedList list=new LinkedList(); 5 //移除头部元素 6 list.removeFirst(); 7 //根据索引位置删除指定元素 8 list.remove(2); 9 //删除尾部的元素 10 list.removeLast(); 11 } 12 }
修改操作
语法:
E set(int index,E e):根据索引位置修改元素。
举个例子:
1 public class Test2 { 2 public static void main(String[] args) { 3 //创建一个无参的LinkedList对象 4 LinkedList list=new LinkedList(); 5 //根据索引位置修改元素 6 list.set(1,"Java"); 7 } 8 }
查询操作
语法:
①E get(int index) :根据索引位置获取元素
②E getFirst() :获取第一个元素
③E getLast() :获取最后一个元素
举个例子:
1 public class Test2 { 2 public static void main(String[] args) { 3 //创建一个无参的LinkedList对象 4 LinkedList list=new LinkedList(); 5 //获取第一个元素 6 list.getLast(); 7 //获取最后一个元素 8 list.getLast(); 9 //根据索引值来查询元素 10 list.get(2); 11 } 12 }