黑马程序员 集合框架(一)

------- android培训java培训、期待与您交流! ----------

 

集合框架


 (1)java是面向对象的语言,我们经常的操作就是操作对象。
    假如我们要操作多个对象,可以使用我们前面讲过的对象数组。
    但是,数组定义的时候,要明确元素个数或者明确元素值。
    而很多时候,这些我们都不明确,所以,java就提供了集合来存储对象元素。


 (2)集合和数组的区别
  A:集合只能存储对象元素(它存储的基本数据类型,其实是由一个装箱的过程)。
    集合的长度是可以变化的。
  B:数组可以存储对象元素,也可以存储基本数据类型元素。
    数组的长度是固定的。


 (3)由于多个集合容器的数据结构不同,所以,他们不断的抽取就形成了集合的体现结构。
    Collection
  |--List
   |--ArrayList
   |--Vector
   |--LinkedList
  |--Set
   |--HashSet
   |--TreeSet


 (4)集合顶层接口Collection中的方法:
  A:存储元素
    add(Object obj) *****
    addAll(Collection c)
  B:删除元素
    remove(Object obj)
    removeAll(Collection c)
    clear()
  C:判断
    isEmpty()
    contains(Object obj)
    containsAll(Collection c)
  D:长度
    size()
  E:迭代器
    iterator() *****
  F:交集
    retainAll()
  G:转成数组
    toArray()


 (5)Iterator的理解
  其实,集合的对象通过iterator方法,返回的是迭代器的子类对象。

  每种集合获取元素的方式是不同的,所以,他们会自己去实现如果获取元素。
  但是,他们都有共性内容:就是先判断是否有数据,然后获取数据。
  所以,就抽取出了一个接口Iterator。

  理解:游戏厅的抓小玩具游戏。


 (6)集合存储自定义对象及内存图。

 

1:List接口
 (1)List接口是Collection接口的一个子接口。


 (2)List接口中的元素有如下特点:
  A:元素有序(存储顺序和取出顺序一致)
  B:元素可以重复


 (3)List接口中的特有方法
  A:add(int index,Object obj):在指定位置加入元素
  B:remove(int index):移除指定位置的元素
  C:set(int index,Object obj):修改指定位置的元素
  D:get(int index):获取指定位置的元素
  E:indexOf(Object obj):获取指定元素的位置
  F:subList(int start,int end):从一个大的List中截取一个小的List
  G:listIterator():返回一个List接口特有的迭代器


 (4)重点代码
  A:集合存储字符串
  public class StringDemo
  {
   public static void main(String[] args)
   {
    //Collection c = new ArrayList();
    //ArrayList list = new ArrayList();
    List list = new ArrayList();
    
    list.add("haha");
    list.add("hehe");
    list.add("heihei");

    //遍历
    Iterator it = list.iterator();
    while(it.hasNext())
    {
     String s = it.next();
     System.out.println(s);
    }
   }
  }


  B:集合存储自定义对象
  
  public class Student
  {
   private String name;
   private int age;

   public Student() {
   }

   public Student(String name, int age) {
    this.name = name;
    this.age = age;
   }

   public String getName() {
    return name;
   }

   public void setName(String name) {
    this.name = name;
   }

   public int getAge() {
    return age;
   }

   public void setAge(int age) {
    this.age = age;
   }
  }

 

 

  public class StudentTest
  {
   public static void main(String[] args)
   {
    List list = new ArrayList();

    Student s1 = new Student();
    s1.setName("张三");
    s1.setAge(20);
    list.add(s1);

    Student s2 = new Student();
    s2.setName("李四");
    s2.setAge(25);
    list.add(s2);

    Student s3 = new Student();
    s3.setName("王五");
    s3.setAge(22);
    list.add(s3);

    Iterator it = list.iterator();
    while(it.hasNext())
    {
     Student s = (Student) it.next();
     System.out.println(s.getName()+"***"+s.getAge());
    }
   }
  }

 

2:List的子实现类
 List
  |--ArrayList
   底层数据结构是数组,而且是线程不安全的。
   增删慢,查询快
  |--Vector
   底层数据结构是数组,而且是线程安全的。
   增删慢,查询快。但是,又由于线程安全,所以,它是都慢。一般不选择。
  |--LinkedList
   底层数据结构是链表,而且是线程不安全的。
   增删快,查询慢

 一般情况下,使用哪种List接口下的实现类呢?
 如果要求增删快,考虑使用LinkedList
 如果要求查询快,考虑使用ArrayList
 如果要求线程安全,考虑使用Vector。

 如果考虑不到任何问题,就使用ArrayList。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值