1list接口
list继承了collection接口,list是有序的Collection,允许重复,空元素。
虽然list可以存各种类型,但是取数据时不一样的对象不一样,所以往list中存数据存一个类型的
所以创建集合对象时,使用泛型
例如 List list =new Arraylist
强制性的把元素要求为string
public interface List extend Collect
有序的collection(也称之为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确的控制,用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
/*list接口
* 1 必须有序
* 2 允许有重复的元素
* 3 允许null值
*
*/
2 Arraylist
public class ArraylList<E> extends AbstriactList<E> implement LIst<E> ,RandomAcess,Cloneable,Serialiable
LIst接口的大小可变的数组的实现(ArrayList的实现实际上就是动态对象数组的实现),实现了所有可选列表操作,并允许包括null在内的所有元素,除了实现list接口外,此类还提供了一些方法来操作内部用来存储列表的数组的大小
* Arraylist实现类,实际上就是动态数组。
* 1、默认构造的Arraylist对象是10个大小的数组
* 2、如果数组已满,就需要动态的扩充数组,扩充的算法:[(原数组数组长度*3)/2]+1
* 3、内部使用动态数组实现
* 4、如果已经知道元素的个数,可以使用指定初始容量的构造方法创建ArrayList对象,
* 这样可以有效的避免数组扩充的次数过多,从而提高效率。
* 5 Arrylist的插入删除操作会影响性能。ArrayList就类似于数组
*
*
代码实现
import java.util.ArrayList;
public class LIstDemo {
public static void arraylist() {
//创建Arraylist 对象
ArrayList list=new ArrayList();
//添加各种元素
list.add(1);
list.add(10);
list.add(10); //允许重复
list.add("mazhongyi");
list.add(true);
//插入方法
list.add(2,50);//指定位置插入 效率低,插入位置之后的元素要一个个的往后移
//取元素
System.out.println(list.get(2));
//清除元素
//list.clear();
//查找列表中是否包指定的含元素,则返回true
System.out.println(list.contains(10));
//检查集合是否为空
System.out.println(list.isEmpty());
//删除指定索引的元素
System.out.println(list.remove(1)); //参数是索引地址,返回list索引对应的元素
//查找一个指定元素对象返回的索引,如果有重复的,返回第一个元素的下标,如果没有返回-1
System.out.println(list.indexOf(10));
//
System.out.println("该集合一共有多少元素? "+list.size());
}
public static void main(String[] args) {
arraylist();
}
}
运行结果
50
true
false
10
2
该集合一共有多少元素? 5
3 vector
public class ArraylList<E> extends AbstriactList<E> implement LIst<E> ,RandomAcess,Cloneable,Serializable
Vector类可以实现可增长的对象数组,与数组一样,它包含可以使用整数索引进行访问的组件,但是,Vector的大小可以根据需要增大或者缩小,以试用创建Vector后进行添加或者移除项操作
* vector实现类
* 1 使用动态对象数组实现
* 2 默认构造方法初始化容量为10
* 3 扩充方式和Arraylist不一样,vector的扩充方式如下:
* (1)如果有指定增量,扩充方式就是当前容量加上指定容量
* (2)如果没有指定增量,扩充方式是原容量*2;
* 4 add方法前面加了一个synchronized,所以vector是线程安全的,ArrayList没有,suoyi
* ArrayList不是线程安全的
*
代码实现
import java.util.Vector;
public class VectorDemo {
public static void vector(){
Vector vector=new Vector();
vector.add("马忠义");
vector.add(12);
vector.add("panpeizhu");
vector.add("lazup");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
4 linkedList
public class LinkedList<E> extends abstracSequentiaList<E>
implements List<E>,Deque<E>,CLoneable,Serializable
实际上就是list接口的链表的实现,实现了所有可选的列表操作,并且允许所有元素(包括null)。除了实现list接口外,LinkedList类还为在列表的开头以及结尾get,remove和insert提供了统一的命名方法。
- 1 使用双向列表实现
- 2 因为是基于链表实现的,所以说适合插入和删除,arralist和vecotor都是基于数据实现的
- 3 试用场景:有一组数据,频繁的对数据进行插入和删除,用linkedlist,如果没有,多线程的用
- vector,单线程的用arraylist
- 4
-
代码实现
public class LinkedListDemo {
public static void LinkedList(){
java.util.LinkedList link=new java.util.LinkedList();
link.add(“马忠义”);
link.add(“panpeizhu”);
link.add(12);
}
}