List三个子实现类分别是:ArrayList, Vector,LinkList.
特点:
ArrayList:
底层数据结构式数组结构,查询块,增删慢
从内存角度考虑:线程不安全的,不同步的,执行效率高
多线程:synchronized :同步的意思 解决线程安全问题
sychronized(锁对象){ 同步代码
共享数据;
}
解决线程安全问题,通过同步可以解决,但是效率低了...
Vector:
这是一个线程安全的类,
底层数据结构是数组:查询快,增删慢
线程安全的,同步,执行效率低!
LinkedList:
:底层数据结构式链表结构,查询慢,增删块
从内存角度考虑:线程不安全,不同步,执行效率高
ArrayList:
ArrayList是List接口中常用的一个子实现类
举例:
public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
arr.add("hello");
arr.add("world");
arr.add("retain");
Iterator it =arr.iterator();
while(it.hasNext()) {
String s=(String)it.next();
System.out.println(s);
System.out.println("---------------------");
// for循环遍历
for(int i=0;i<arr.size();i++) {
String s1=(String)arr.get(i);
System.out.println(s1);
}
}
}
}
ArrayList集合存储自定义对象并遍历
举例:
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
Student s1=new Student("马云",27);
Student s2=new Student("马化腾",42);
Student s3=new Student("林泽勋",40);
Student s4=new Student("林更新",85);
arr.add(s1);
arr.add(s2);
arr.add(s3);
arr.add(s4);
Iterator it =arr.iterator();
while (it.hasNext()) {
Student s=(Student) it.next();
System.out.println(s);
System.out.println("--------------");
for(int i=0;i<arr.size();i++) {
Student ss=(Student)arr.get(i);
System.out.println(ss);
}
}
}
}
Vector: 底层是一种可增长对象数组,查询快,增删慢
线程安全,同步,执行效率低
特有功能:
public void addElement(Object obj)------->add(Object obj)
public Enumeration elements():返回此向量的枚举--->相当于:public Iterator iterator()
boolean hasMoreElements() --->boolean hasNext() ;
Object nextElement() --->Object next() ;
举例:
public class VectorDemo1 {
public static void main(String[] args) {
Vector v=new Vector();
v.addElement("hello");
v.addElement("world");
v.addElement("retain");
Enumeration en=v.elements();
while(en.hasMoreElements()) {
String s=(String)en.nextElement();
System.out.println(s);
}
}
}
LinkedList:
LinkedList集合的特点:
底层是一种链表实现,查询慢,增删快
线程不安全的,不同步,执行效率高
特有功能:
添加功能
addFirst(Object e):将指定的元素插入到列表的开头
addLast(object e):将指定的元素添加到列表末尾
获取功能:
getFirst():获取列表第一个元素
getLast():获取列表末尾元素
删除功能
public Object removeFirst()移除并返回此列表的第一个元素。
public Object removeLast()移除并返回此列表的末尾元素。
举例:
* @author 田伟
*
*/
public class LinkedListDemo1 {
public static void main(String[] args) {
LinkedList l=new LinkedList();
l.add("a");
l.add("b");
l.add("c");
l.add("d");
System.out.println(l);
l.addFirst("hello");
l.addLast("world");
System.out.println(l);
System.out.println(l.getFirst());
System.out.println(l.getLast());
System.out.println("------------");
System.out.println(l.removeLast());
System.out.println(l.removeFirst());
System.out.println(l);
}
}
注释:在开发中,一般情况下,如果不提示用那个集合,都默认为ArrayList.
ArrayList的一些应用
需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉!
思路:
1)创建一个旧集合,添加重复元素
2)创建一个新集合
3)遍历旧集合中的元素获取到每一个元素
在旧集合中判断新集合中是否包含旧集合中的元素
包含,不搭理
不包含,添加到新集合中
4)遍历新集合
* @author 田伟
*
*/
public class ArrayListTest1 {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<String>();
arr.add("a");
arr.add("b");
arr.add("a");
arr.add("c");
arr.add("d");
arr.add("b");
ArrayList<String> arr1=new ArrayList<String>();
Iterator it=arr.iterator();
while(it.hasNext()) {
String s=(String)it.next();
if(!arr1.contains(s)) {
arr1.add(s);
}
}
for(String s1:arr1) {
System.out.println(s1);
}
}
}
需求:去重集合中重复的元素
假设:现在的需求:不允许新建一个集合去完成,怎么办?
举例:
**去重集合中重复的元素
* 假设:现在的需求:不允许新建一个集合去完成,怎么办?
* @author 田伟
*
*/
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<String>();
arr.add("c");
arr.add("s");
arr.add("s");
arr.add("c");
arr.add("d");
arr.add("c");
arr.add("n");
/**
* 引入选择排序,
* 用0索引对应的元素依次和后面索引对应的元素进行比较
* 如果前面的元素和后面的元素重复了,把后面元的干掉
* 依次1索引....
*/
for(int i=0;i<arr.size()-1;i++) {
for(int j=i+1;j<arr.size();j++) {
if(arr.get(i).equals(arr.get(j))) {
arr.remove(j);
}
}
}
for(String s:arr) {
System.out.println(s);
}
}
}