JAVA集合框架
JAVA集合框架:
数组的局限性:数组长度一旦确定,将不能随意扩展。一个系统如果要存储的数据的长度是不确定的,那么使用数组来存储就不方便了,此时可以选择使用集合这种数据存储结构。
Iterable--Collection
--List(有序不唯一,允许元素为null)
ArrayList
LinkedList
--Set(无序的唯一)
ArrayList特点:
这个集合它的存储结构和数组类似,被称做动态数组(长度可动态扩展的数组),在内存中分配连续的存储空间。
遍历元素和随机访问元素的效率比较高,而添加和删除元素的效率比较低。
添加和插入元素
public class ArrayListTest1 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("tom");
list.add("mary");
list.add("kitty");
list.add("jerry");
//遍历集合
for(int i=0;i<list.size();i++) {
//获得集合元素
String s=(String)list.get(i);
System.out.print(s+"\t");
}
list.add("vivi");
System.out.println("\n元素的个数:"+list.size());
//插入
list.add(0, "apple");
System.out.println("=================");
//遍历集合
for(int i=0;i<list.size();i++) {
//获得集合元素
String s=(String)list.get(i);
System.out.print(s+"\t");
}
}
}
删除元素
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("tom");
list.add("jack");
list.add("mary");
list.add("lily");
for(int i=0;i<list.size();i++) {
String name=(String)list.get(i);
System.out.println(name);
}
//删除元素
//判断一下要删除的元素是否存在
if(list.contains("mary")) {
list.remove("mary");
if(!list.contains("mary")) {
System.out.println("删除成功!");
System.out.println("==================");
for(int i=0;i<list.size();i++) {
String name=(String)list.get(i);
System.out.println(name);
}
}
}else {
System.out.println("要删除的元素不存在");
}
}
}
LinkedList
是以链表的方式来保存数据元素的
因为这种存储结构使得Linkedlist在插入元素和删除元素时效率会比较高,而遍历元素时效率会比较低。
Linkedlist提供了在集合的首尾查看添加删除元素的一些方法。
public class LinkedListTest1 {
public static void main(String[] args) {
LinkedList list=new LinkedList();
list.add("tom");
list.add("jerry");
list.add("kiity");
for(int i=0;i<list.size();i++) {
System.out.println((String)list.get(i));
}
list.addFirst("mary");
list.addLast("vivi");
System.out.println("====================");
for(int i=0;i<list.size();i++) {
System.out.println((String)list.get(i));
}
System.out.println("第一个元素:"+list.getFirst().toString());
System.out.println("最后一个元素:"+list.getLast().toString());
list.removeFirst();
list.removeLast();
System.out.println("========================");
for(int i=0;i<list.size();i++) {
System.out.println((String)list.get(i));
}
}
}
面试题:
-
总结ArrayList和LinkedList的异同
-
Vector和ArrayList的异同?
Vector和ArrayList一样都是长度可变的动态数组。所不同的是Vector是JDK1.0推出的集合,是线程同步的,ArrayList是JDK1.2推出的,没有实现线程同步,所以的Vector的效率低,线程安全,ArrayList线程非安全,效率高。
泛型集合:
在jdk1.5时推出了泛型集合,在泛型集合出现前,集合中数据的类型是不能控制,在一个集合中可以添加不同数据类型的元素,这样会给集合元素的访问带来安全隐患,极容易引发ClassCastException。泛型集合出现后,集合中添加的元素可以通过参数来进行控制,也就是类型参数化,避免访问集合元素时的拆箱操作,减少了判断逻辑,降低了安全隐患。 Java中每一种集合都支持泛型。
public class ArrayListTest8 {
public static void main(String[] args) {
ArrayList<Student> students=new ArrayList<>();
Student s1=new Student("tom",19,"男");
Student s2=new Student("jerry",20,"男");
Teacher t1=new Teacher("mary","java");
students.add(s1);
students.add(s2);
//students.add(t1);
for(int i=0;i<students.size();i++) {
Student s=students.get(i);
System.out.println("name:"+s.name+"age:"+s.age+"gender:"+s.gender);
}
}
}