柘明Java笔记14

第七章 集合

集合概念

存储一个班学员信息,假定一个班容纳20名学员

当我们需要保存一组一样(类型相同)的元素的时候,我们应该使用一个容器来存储,数组就是这样一个容器。 数组的缺点:数组一旦定义,长度将不能再变化。 然而在我们的开发实践中,经常需要保存一些变长的数据集合,于是,我们需要一些能够动态增长长度的容器来保存我们的数据。而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构。Java中对于各种数据结构的实现,就是我们用到的集合。

集合 API

集合体系概述:Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

Collection 接口

Collection 接口-定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。 1.Set 中的数据对象没有顺序且不可以重复。 2.List 中的数据对象有顺序且可以重复。

List 接口及实现类

List继承了Collection接口,有三个实现的类: ArrayList:数组列表,数据采用数组方式存储。 LinkedList:链表. Vector:数组列表,添加同步锁,线程安全的. 特点:ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高. LinkedList采用链表存储方式。插入、删除元素时效率比较高.

public class ArrayListDemo1 {
    
// ArrayList
        public static void main(String[] args) {    
         //List<String> list = new ArrayList<>();
          /*  ArrayList底层是数组实现
             add();向集合中添加元素时,底层会默认创建一个长度为10的Object类型数组,
                   当数组装满时,再次添加元素,会创建一个原来数组长度1.5倍的新数组,将原数组内容复制过来
                  最后将新数组地址赋给底层的数组
             public boolean add(E e) {
                    ensureCapacityInternal(size + 1);  // Increments modCount!!
                    elementData[size++] = e;
                    return true;         }       
             if (minCapacity - elementData.length > 0)
                   grow(minCapacity);底层扩展的方法  */
          ArrayList<String> list = new ArrayList<>();
                            list.add("a");
                            list.add("b");
                            list.add("c");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add("d");
                            list.add(0, "X");//向指定下标位置上添加元素
                            System.out.println(list.get(11));//elementData[index];
                            System.out.println(list.remove(0));//删除并返回指定位置的元素
                            list.set(2, "K");//替换指定位置的元素
                            System.out.println(list.size());//返回集合中实际存储的元素个数
                            System.out.println(list);   }
         
     //1.for循环遍历    
         /*  for (int i = 0; i < list.size(); i++) {
                      System.out.println(list.get(i)); }  */         
    //2.增强for循环遍历        
             for(String s : list){
                 System.out.println(s);}
​
//LinkedList
        public static void main(String[] args) {
         LinkedList<String> llist  = new LinkedList<>();
                            llist.add("a");//向链表中添加元素 [0,1,2,3,4]
                            llist.add("b");
                            llist.add("c");
                            llist.add("d");
                            llist.add("e");
      System.out.println(llist.get(3));//要找的元素位置小于size/2,从头结点开始查找,否则从尾结点开始查找
                            llist.addFirst("X");
                            llist.addLast("Y");
                            System.out.println(llist.removeFirst());
                            System.out.println(llist.removeLast());                     
               System.out.println(llist);                    }
    
//Vector
        public static void main(String[] args) {
         // 底层也是数组实现,但是是线程安全的
         Vector<String> v = new Vector<>();
                     v.add("a");
                     v.add("b");
                     v.add("c");
                     v.add("d");
                     v.add("a");
                     v.get(1);
                     System.out.println(v);}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值