黑马程序员技术交流社区

标题: Java集合框架、List接口 [打印本页]

作者: lilongbin2016    时间: 2016-12-10 23:31
标题: Java集合框架、List接口
一、Collections集合框架(API文档 java.util 下面) 最重要的两个子接口:
-----List接口 : (List集合特点:1.元素可以重复2.有序的)
有三个重要的实现类 ArrayList,LinkedList,Vector(了解)  List集合代替了Vector

ArrayList集合(数组集合)的特点:底层数据结构是数组,是有序的(存储的顺序和取出顺序是一致的),增删速度慢,查询速度快

LinkList集合(链表集合)的特点:底层数据结构是链表,是有序的(存储的顺序和取出顺序是一致的),增删速度快,查询速度慢(异步的)

-----Set接口 : (Set集合特点:1.元素不可以重复2.无序的)
最重要的实现类 HashSet,TreeSet(了解)

什么是集合框架?
是个容器,用来存储数据的,是用来存储类类型的数据(对象),只能存储对象(Object)。

可以用数组存储对象,为什么又出现集合框架呢?
原因:数组长度是不可以改变的,存在局限性,但是集合框架的长度是可变的。

ArrayList(异步的)的用法
初始化一个长度为10的集合,当超过这个长度的时候会以原先50%去增加新的空间。

1.添加数据+插入数据
   
                       add();                   addAll();
eg:ArrayList l1=new ArrayList();
     List l2=new ArrayList();//多态的表现形式
     //add方法      
     l1.add(1);
     l1.add(2.0);
     l1.add("邓超");
     l1.add("孙俪");
     l1.add("张三");      
     System.out.println(l1.toString());
     l1.add(3, "赵六");      
     System.out.println(l1.toString());
     
     //addAll方法      
     List a=new ArrayList();
     a.add("邓超");
     a.add("孙俪");  
     List b=new ArrayList();
     b.add("张三");
     b.add("李四");

     //插入方法
     if (b.addAll(1,a)) //a里面的元素放到b里面
   System.out.println("插入成功");
  else
   System.out.println("插入失败");
  
    System.out.println("b="+b);
    System.out.println("a="+a);
结果为:[1, 2.0, 邓超, 孙俪, 张三]
              [1, 2.0, 邓超, 赵六, 孙俪, 张三]
              插入成功
              b=[张三, 邓超, 孙俪, 李四]
              a=[邓超, 孙俪]

2.删除数据

clear();
remove(int x) ;
remove(Object obj);
Object obj = list3.remove(2);//将list3的第二个元素移除并返回给obj
eg:List l3=new ArrayList();
     l3.add(1);
     l3.add(2);
     l3.add(3);
     l3.add("a");
     l3.add("b");
     l3.add("c");
     syso(l3);    //[1, 2, 3, a, b, c]
//            l3.clear();//清空集合里面的数据
     l3.remove(2);//移除3
     syso(l3);//[1, 2, a, b, c]
     Object obj=l3.remove(2);//将索引值为2的(对象)移除,并把这个对象(obj)返回
     syso(obj); //a
     syso("原来的集合还有:"+l3);//[1, 2, b, c]
     
     boolean flag=l3.remove("c");
     if (flag) {
   syso("移除成功");
  } else {
   syso("移除失败");
  }
     syso("原来的集合还有:"+l3);//[1, 2, b]   
     List listA=new ArrayList();
     listA.add("张三");
     listA.add("李四");
     listA.add("王五");
     listA.add("赵六");
     List listB=new ArrayList();
     listB.add("张三");
     listB.add("李四");
     listB.add("田七");
     listB.add("周八");   
     if (listA.removeAll(listB)) {
   syso("移除成功");
  } else {
   syso("移除失败");
  }                                            //已成功
     syso("A集合"+listA);         //A集合[王五, 赵六]
     syso("B集合"+listB);         //B集合[张三, 李四, 田七, 周八]

3.修改数据

set(index, element);将index位置上的元素替换为element
eg:List l5=new ArrayList();
     l5.add("张三");
     l5.add("李四");
     l5.add("王五");
     l5.add("赵六");
     syso(l5);        //张三, 李四, 王五, 赵六]      
     l5.set(0, "孙久");
     syso(l5);       //[孙久, 李四, 王五, 赵六]

4.查找数据

Object get(int index);//根据集合里面的index索引值查找相应元素
index(Object obj);//查询obj在集合中第一次出现的位置(从左向右)
lastIndexOf(Object obj);//查询obj在集合中第一次出现的位置(从右向左),查不到返回-1
size();//查找集合中元素的个数
eg:List l6=new ArrayList();
     l6.add("张三");
     l6.add("张三");
     l6.add("李四");
     l6.add("王五");
     l6.add("赵六");
     syso(l6.size());//集合元素的个数5
     syso(l6.indexOf("田七"));//-1  没有这个元素
     syso(l6.indexOf("张三"));//0
     syso(l6.lastIndexOf("张三"));//1      
     Object ob=l6.get(4);
     syso(ob);//赵六

5.判断

boolean contanins(Obj obj);//判断是否有obj元素
boolean isEmpty();//判断集合是否为空
eg:List l7 = new ArrayList();
        l7.add("张三");
        l7.add("张三");
        l7.add("李四");
        l7.add("王五");
        l7.add("赵六");
        syso(l7.isEmpty());// false
        syso(l7.contains("孙九"));// false
      
6.转换

Object[] obj .toArray();//将一个集合转换为相应的数组
eg:List l8=new ArrayList();
        l8.add(1);
        l8.add(2);
        l8.add(new Object());
        l8.add("王五");
        l8.add("赵六");      
        Object[] o2=l8.toArray();
        for (Object o:o2) {
        System.out.print(o+"\t");
     }
结果为:1        2        java.lang.Object@3ec44cfb        王五        赵六

LinkList集合(链表集合)的特点:底层数据结构是链表,是有序的(存储的顺序和取出顺序是一致的),增删速度快,查询速度慢(异步的)

1.增加数据

addFirst();===替换为===》offerFirst();//将元素添加到集合开头
addLast();===替换为===》offerLast();//将元素添加到集合结尾

2.删除数据

clear();//清空集合
removeFirst();===替换为===》pollFirst();//移除集合当中第一个元素,并返回
removeLast();===替换为===》pollLast();//移除集合当中最后一个元素,并返回

3.修改数据

set(index, element);将index位置上的元素替换为element

4.查找数据

Object get(int index);//根据集合里面的index索引值查找相应元素
Object getFirst(int index);===替换为===》peekFirst();//得到第一个元素
Object getLast(int index);===替换为===》peekLast();//得到最后一个元素

Vector(同步的)的用法
初始化一个长度为10的集合,当超过这个长度的时候会以原先100%去增加新的空间。

结论:List集合判断里面元素是否重复是根据equals判断

除了字符可以用equals方法判断之外,自定义对象也可以用equals方法判断

自定义对象怎么用equals方法判断呢?

1.两个人,姓名一样,年龄一样,就认定为同一人
要求:集合里面只能存储一个人




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2