黑马程序员——Java集合之List集合体系及泛型
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
1:常见的数据结构
?(1)面试题:数据结构+算法
??常见的数据结构及其特点。
A:数组数据结构:数组数据结构,因为有索引,查询速度快,但增删慢。
B:链表数据结构:链表数据结构,查询速度慢,但增删速度快。
C:红黑树数据结构:红黑树又称二叉树,可以实现高效的查询。
?(2)数据结构:
??栈:先进后出
??队列:先进先出
??数组:查询快,增删慢
??链表:查询慢,增删快
2:List及其子类
?(1)List的体系结构及特点
??List 元素有序(存储和取出的顺序一致),元素可以重复
???|--ArrayList
????底层数据结构是数组,查询快,增删慢
????线程不安全,效率高
???|--Vector
????底层数据结构是数组,查询快,增删慢
????线程安全,效率低
???|--LinkedList
????底层数据结构是链表,查询慢,增删快
????线程不安全,效率高
?(2)什么时候该使用那种集合?
??是否线程安全:
???是:Vector(一般也不用,会有更好的方式)
???否:ArrayList,LinkedList
????查询多:ArrayList
????增删多:LinkedList
??当你不知道用谁,请用ArrayList
?(3)List接口的特殊功能 ??A:添加功能
???add(int index,Object obj)
在指定的索引位置插入指定的元素
??B:删除功能
???remove(int index)
删除指定位置的元素
??C:修改功能
???set(int index,Object obj)
修改指定位置的元素的值
??D:获取功能
???get(int index)
获取指定位置的元素对象
??E:列表迭代器
???ListIterator listIterator()
对List集合中的元素进行迭代
?(4)List存储字符串并遍历(加入泛型)
//创建集合对象
??List<String> list = new ArrayList<String>();
//调用集合添加方法添加元素
??list.add("hello");
??list.add("world");
??list.add("java");
//使用迭代器对集合进行迭代
??Iterator<String> it = list.iterator();
??while(it.hasNext())
??{
???String s = it.next();
???System.out.println(s);
??}
//普通for循环,使用集合的ssize()方法得到集合长度和get()方法获得指定位置的元素??
for(int x=0; x<list.size(); x++)
??{
???String s = list.get(x);
???System.out.println(s);
??}
?(5)ArrayList存储自定义对象并遍历
//创建一个Person类
public class Person{
?private String name;
?private int age;
?public Person(){}
?public Person(String name;int age){
??this.name=name;
??this.age=age;
?}
?public void setName(String name){
??this.name=name;
?}
?public String getName(){
??return name;
?}
?public void setAge(int age){
??this.age=age;
?}
?public int getAge(){
??return age;
?}
}
//用ArrayList集合创建对象并存储字符串
import java.util.Iterator;
import java.util.ArrayList;
public class ArrayListDemo1{
?public static void main(String[]args){
??ArrayList<String> alist=new ArrayList<String>();
??alist.add("string1");
??alist.add("string2");
??alist.add("string3");
??Iterator<String> it=alist.iteraror();
??while(it.hasNext()){
???String s=it.next();
???System.out.println(s);
??}
??for(int i=0;i<alist.size();i++){
???String s=alist.get(i);
???System.out.println(s);
??}
?}
}?
(6)LinkedList存储自定义对象并遍历
//创建一个Person类
public class Person{
?private String name;
?private int age;
?public Person(){}
?public Person(String name;int age){
??this.name=name;
??this.age=age;
?}
?public void setName(String name){
??this.name=name;
?}
?public String getName(){
??return name;
?}
?public void setAge(int age){
??this.age=age;
?}
?public int getAge(){
??return age;
?}
}
//用LinkedList集合创建对象并存储自定义的对象
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo2{
?public static void main(String[]args){
??LinkedList<Person> lin=new LinkedList<Person>();
??lin.add(new Person("person4",16));
??lin.add(new Person("person5",26));
??lin.add(new Person("person6",36));
??Iterator<Person> it=lin.iteraror();
??while(it.hasNext()){
???Person p=it.next();
???System.out.println(p);
??}
??for(int i=0;i<lin.size();i++){
???Person p=alist.get(i);
???System.out.println(p);
??}
?}
}
3:泛型(了解)
?(1)是一种特殊的类型,在创建对象或者调用方法的时候才明确类型。
?(2)泛型的表示:
??<数据类型>
?(3)泛型的好处:
??A:把运行期间的异常提前到了编译期间
??B:优化了程序设计
??C:避免了强制类型转换
?(4)在哪里用,什么时候用?
??查看API的时候,发现类或者接口后面有<>的时候,一般要使用泛型。
??而且,一般都是在集合中使用。
?(5)泛型的概述
??A:泛型类:把泛型定义在创建的类上
??B:泛型接口:把泛型定义在接口上
??C:泛型方法:把泛型定义在方法上