java类集框架的使用
Collection集合:顶层接口
两大分支:List 接口、set接口
List接口:
1.ArrayList
实现类:
ArrayList:内部是一个采用顺序式数组结构,查询速度快,增删速度慢 (动态数组)
1 public class ArraylistDemo { 2 public static void main(String[] args) { 3 List arrayList = new ArrayList(); 4 System.out.println("长度:"+arrayList.size()+",是否为空"+arrayList.isEmpty()); 5 arrayList.add("list");//保存数据 6 arrayList.add("list");//保存重复的数据 7 arrayList.add("list2"); 8 arrayList.add("list3"); 9 for (Object o : arrayList) { 10 System.out.println(o); 11 } 12 System.out.println("长度:"+arrayList.size()+",是否为空"+arrayList.isEmpty()); 13 } 14 }
LinkedList:内部是一个链表接口,查询速度较慢,增删速度快(双向链表),它的每一个节点中保存是两个元素对象,一个它对应的下一个节点,以及另一个它对应的上一个节点,比ArrayList占用更多的内存空间。同时LinkedList比ArrayList多实现了一个Queue队列数据接口
1 import java.util.Iterator; 2 import java.util.LinkedList; 3 import java.util.List; 4 5 public class LinkedListDemo { 6 7 public static void main(String[] args) { 8 // 创建集合 9 List list = new LinkedList();//只能使用左边类型定义的方法 10 LinkedList list2 = new LinkedList(); 11 // 添加元素 12 list2.addFirst("a1"); 13 list2.addFirst("a2"); 14 list2.addFirst("a3"); 15 //获取(获取) 16 System.out.println(list2.getFirst());//a3 17 18 //删除(删除元素,返回元素) 19 Object removeFirst1 = list2.removeFirst(); 20 Object removeFirst2 = list2.removeFirst(); 21 Object removeFirst3 = list2.removeFirst(); 22 //NoSuchElementException没有元素异常 23 //Object removeFirst = list2.removeFirst(); 24 25 //删除所有 26 while(!list2.isEmpty()){//isEmpty方法,判断集合是否为空,如果有元素,返回false,反之则true 27 list2.removeLast();//a1 a2 a3 队列结构 28 list2.removeFirst();// a3 a2 a1堆栈结构 29 }; 30 for (Iterator it= list2.iterator(); it.hasNext();) { 31 list.remove(it.next()); 32 33 } 34 // for(int x=0;x<list2.size();x++){ 35 // list2.remove(x); 36 // } 37 } 38 39 }
Vector:用synchronized关键字修饰,线程安全的集合
1 import java.util.List; 2 import java.util.Vector; 3 4 /** 5 * @author cxl 6 */ 7 public class VectorDemo { 8 public static void main(String[] args) { 9 List<String> a = new Vector<String>();//实例化list集合 10 System.out.println("长度:"+a.size()+",是否为空"+a.isEmpty()); 11 a.add("list");//保存数据 12 a.add("list");//保存重复的数据 13 a.add("list2"); 14 a.add("list3"); 15 for (Object o : a) { 16 System.out.println(o); 17 } 18 System.out.println("长度:"+a.size()+",是否为空"+a.isEmpty()); 19 } 20 }
set接口:
Hashset:采用了哈希算法(一般称为散列、无序),内部存储元素是会先根据hashCode算出这个对象的哈希值,哈希值不同,直接存储元素,如果哈希值相同,则比较这个对象的内容(equals),
内容相同,则认为这是重复的元素,如果内容不同,则通过内部的拉链法存储元素
import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class HashSetDemo { public static void main(String[] args) { //创建集合 没有下标,不允许重复元素,无序(存进去的顺序和取出来的顺序不一致) Set<String> set = new HashSet<String>(); set.add("小一"); set.add("大二"); set.add("c3"); set.add("D4"); System.out.println(set); } }
TreeSet:二叉树结构,动对存进去的元素做自然排序,对于自定义的对象需要实现Comparable接口,重写comparable方法,建议对象的大小的
默认排序是根据comparTo方法返回的int类型值决定,返回0,代表元素相同,返回负数,代表当前对象比传入的参对象小,返回正数,代表当前对象比传入参数对象大,注意:如果是自定义对象,最好是将所有的条件都同时比较一次,先比较主要条件,在比较次要条件
public class TreeSetDemo { public static void main(String[] args) { Set<String> set = new TreeSet<>(); set.add("小一"); set.add("大二"); set.add("c3"); set.add("D4"); System.out.println(set); } }
程序执行结果:[c3, D4, 小一, 大二]
Map接口:
集合与数据的区别:
数组(Array):长度是固定的,数组存储的元素的类型是确定的
集合(ArrayList):长度是变化的,有序并可以有重复值,存储都是对象
面试题:
1.集合框架有什么优点?
集合的长度是可以变的,数组的长度是固定的
2.java集合框架中包含了哪些接口和类?
| Collection | ||||||||
| List | Set | Map | ||||||
|
|
|
||||||
3.ArrayList与LinkedList有何异同?
1.数据结构不同
2.效率不同
查询多的时候使用ArrayList
操作多的时候使用Linkedlist

浙公网安备 33010602011771号