集合一(理想少年永不被现实招安)

本文详细介绍了Java集合框架中的重要概念,包括集合、数组、List接口、ArrayList和LinkedList的区别与使用。讲解了泛型在集合中的应用,以及如何通过迭代器遍历集合和进行元素的操作。此外,还探讨了数据结构中的栈、队列和数组、链表的特点,以及LinkedList作为链表实现的List集合的特殊功能。最后,讨论了泛型在提高代码安全性方面的作用。
摘要由CSDN通过智能技术生成

集合
    javaee基础中的重点 
*集合概述和集合的继承体系
*collection集合
*List集合
*ArrayList集合
*LinkedList集合
*泛型

集合和数组的对比小结
        1.数组的长度是不可变的,集合的长度是可变的
        2.数组可以存基本数据类型和基本数据类型
          集合只能存储引用数据类型,如果要存基本数据类型,需要存对应的包装类
集合的体系


Collection 集合概述
    1.是单列集合的顶层接口,他表示一组对象,这些对象也称为Collection的元素
    2.JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)的实现
     创建collection集合的对象
            多态的方式
            具体的实现类ArrayList
    具体的方法  方法名boolean add(E e)   说明:添加元素        
                方法名boolean remove(Object o)   说明:从集合中移除指定的元素
                方法名boolean removeif(Object o)   说明:根据条件进行删除
                方法名void  clear()   说明:清空集合
                方法名boolean comtains(Object o)   说明:判读集合中是否存在指定的元素
                方法名boolean isEmpty()   说明:判读集合中是否为空
                方法名int size()   说明:集合的长度,也就是集合中元素的个数
代码实例:
      

 

 public class test {
            public static void main(String[] args) {
        //        方法名boolean add(E e)   说明:添加元素
        //        方法名boolean remove(Object o)   说明:从集合中移除指定的元素
        //        方法名boolean removeif(Object o)   说明:根据条件进行删除
        //        方法名void  clear()   说明:清空集合
        //        方法名boolean comtains(Object o)   说明:判读集合中是否存在指定的元素
        //        方法名boolean isEmpty()   说明:判读集合中是否为空
        //        方法名int size()   说明:集合的长度,也就是集合中元素的个数
                Collection<String>  list=new ArrayList<>();
                list.add("a");
                list.add("b");
                list.add("c");
                list.add("aa")
                System.out.println(list);
                //注意  remove方法返回的是一个true或者false  成功就是true  失败就是false
                boolean remove = list.remove("a");
                boolean remove1 = list.remove("d");
                System.out.println(remove);//true
                System.out.println(remove1);//false
                //removeif 根据条件删除
                //removeif底层会遍历集合,得到集合的每一个元素  s依次表示这每一个元素
                //就会把每一个元素放到lambda表达式去判断一下
                //如果true则删除  如果false就会删除
                list.removeIf((String s)->{
                    return  s.length()==1;
                });
                System.out.println(list);
                //void clear清空集合
                list.clear();
                System.out.println(list);
                //判断集合是否存在  返回值和remove一样是一个boolean值
                boolean contains = list.contains("a");
                System.out.println(contains);
                //判断集合是否存在  返回值和remove一样是一个boolean值
        
                boolean empty = list.isEmpty();
                System.out.println(empty);
        
                //集合的长度
                int size = list.size();
                System.out.println(size);
        
            }
        }      

     
    Collection集合的遍历
        Iterator : 迭代器,集合的专用遍历方式
        Iterator<E> iterator(): 返回集合中的迭代器对象,该迭代器对昂默认指向当前集合的0索引
        
        Iterator中的常用方法
        boolean hasNext():判断当前位置是否有元素可以被取出
        E next(): 获取当前位置元素  将迭代器对象移向下一个索引位置
    代码:
        

public class test1 {
            public static void main(String[] args) {
                Collection<String> list =new ArrayList();
                list.add("a");
                list.add("b");
                list.add("c");
                list.add("d");
        
                //获取迭代器的对象
                //迭代器对象一旦被创建出来,默认指向集合的0索引处
                Iterator<String> iterator = list.iterator();
                
                //表示当前位置是否有元素可以被取出  返回 boolean值
                System.out.println(iterator.hasNext());
                //取出当前位置元素+将迭代器往后移动一个索引的位置
                System.out.println(iterator.next());
        
                //集合的遍历  使用之前先看看是否可以移动到下一个索引  如果有正常取出  如果没有就        会报错
                while (iterator.hasNext()){
                    System.out.println(iterator.next());
                }
            }
        }


        迭代器的删除方法  
        案例:使用迭代器删除集合中的某一个元素(for循环的话 如果元素重复就会删除一个 这是for循环的缺陷)
            

public class test3 {
            public static void main(String[] args) {
                ArrayList<String>  list=new ArrayList<>();
                list.add("a");
                list.add("b");
                list.add("c");
                list.add("d");
                Iterator<String> iterator = list.iterator();
                while (iterator.hasNext()){
                    String s="b";
                    if ("b".equals(s)){
                        iterator.remove();
                    }
                }
            }
        }


        增强for  
            简化数组和collection集合的遍历
            JDK1.5之后出现的,内部原理是一个Iterator迭代器
            实现Iterable接口的类才可以使用迭代器和增强for
            
        增强for的格式
                for(元素数据类型名 变量名:数组或者是Collection集合){
                    //在此处使用变量即可,该变量就是元素
                }
        代码:
            

public class tets4 {
            public static void main(String[] args) {
                ArrayList<String> list=new ArrayList<>();
                list.add("a");
                list.add("b");
                list.add("c");
                list.add("d");
                //数据类型一定是集合或者数组中元素的类型
                //s仅仅是一个变量名,在循环的时候代表的集合或者数组中的每一个元素
                //list就是遍历的集合和数组
                for(String s : list){
                    System.out.println(s);
                }
            }
        }


    注意:再增强for中 修改s的变量值 并不会影响集合的元素
    循环的使用场景
        如果需要操作索引,使用for使用  在刚刚的代码中也可以使用for  但要加上i--去检索前一个值
        如果在遍历的过程中需要操作元素,请使用迭代器
        如果只是遍历集合的元素,使用增强for
    List集合的概述和基本使用
        List集合概述
                有序集合,这里的有序是指的存区顺序
                用户可以精确到列表每个元素的插入位置,用户可以通过访问索引方式访问元素,并搜索列表中的元素
                与set元素不同,列表允许存储重复的元素
                
                总结就是有序,存取顺序一致,有索引,可以通过索引操作元素,可重复,存储的元素可以重复
        代码:
            

public class tets5 {
            public static void main(String[] args) {
                List<String>  list=new ArrayList<>();
                list.add("a");
                list.add("a");
                list.add("c");
                list.add("d");
                //迭代器
                Iterator<String> iterator = list.iterator();
                while (iterator.hasNext()){
                    System.out.println(iterator.next());
                }
                //增强for
                for (String s : list) {
                    System.out.println(s);
                }
            }
        }


        List集合特有方法
        void add(index,E element)   在次集合中的指定位置插入指定元素
        E remove(int index)   删除指定元素索引处的元素,返回被删除的元素
        E set(int index,E element)   修改指定元素索引处的元素,返回被修改的元素
        E get(int index)   返回指定索引处的元素
        代码实例:
              

 public class tets5 {
            public static void main(String[] args) {
                List<String>  list=new ArrayList<>();
                list.add("a");
                list.add("b");
                list.add("c");
            list.add(0,"sss");//原来的元素会到下一个位置  1索引位置
                System.out.println(list);
                //list集合中有两个删除的方法
                //第一个删除指定的元素,返回值是boolean  是否成功
                //第二个删除指定索引的元素,返回值表示实际删除的元素
                String remove = list.remove(0);
                System.out.println(remove);
                System.out.println(list);
                //修改元素  使用后原来的元素就不存在了
                String set = list.set(0, "123");
                System.out.println(set);//123
                System.out.println(list);
                //返回指定处索引
                String s = list.get(0);
                System.out.println(s);
            }
        }


        
    数据结构
        概述:数据结构就是计算机存储,组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合
              通常情况下,选择合适的数据结构会带来更高的运行和存储效率
    常见数据结构之栈  
            数据进入栈模型的过程称为:压/进栈
            数据离开栈模型的过程称为:弹/出栈
    比较像弹夹
    栈是一种先进后出的模型 
            数据从后端进入队列模型的过程称为:入队列
            数据从前端进入队列模型的过程称为:出队列
    比较像买票的过程 (没有插队情况!!!!)  先排队的先买
    
    数组和链表 
        数组 :查询数据通过地址值和索引定位,查询任意数据耗时相同,查询速度快
               删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低
               添加数据时,添加位置后的每个数据后移,再添加元素,添加效率低
    数组是一个查询快,增删慢的模型    
        链表:每一个元素都称之为节点,每一个节点都有特定在内存中的位置,里边记录的有数据和下一个节点的地址值 第一个创建出来的节点称之为头节点,
              最后一个节点没有地址值,当只有第一个节点时,头节点没有下一个节点的地址值,当第二个节点进来的时候,第一个节点才会有地址值,依次类推
        
        链表是一个增删快的模型(对比数组)查询慢从第一个一次往后找(单向链表)
        双向链表和单向链表相比 存的不只有数据,下一条数据的地址值,还有上一条数据的地址值,查询数据的时候会看数据在链表的前端还是后端,
        如果在前端,从前开始找,离后边进,从后开始找
    
    LinkedList 
        ArrayList  底层数据结构是数组,查询快,增删慢
        LinkedList  底层数据结构是链表,查询慢,增删快
    因为LinkedList和ArrayList都是List包下的  方法大多类似
    所以直接写一个案例  使用LinkedList 存储字符串 并遍历
    

public class test6 {
            public static void main(String[] args) {
                LinkedList<String>  list=new LinkedList<>();
                list.add("a");
                list.add("b");
                list.add("c");
                list.add("d");
        
                for (int i = 0; i < list.size(); i++) {
                    System.out.println(list.get(i));
                }
        
                for (String s : list) {
                    System.out.println(s);
                }
                Iterator<String> iterator = list.iterator();
                while (iterator.hasNext()){
                    String next = iterator.next();
                    System.out.println(next);
                }
            }
        }


        
    特有功能:
            public void addFirst(E e)  在该列表开头插入指定的元素
            public void addLast(E e)  将该元素追加到列表的末尾
            public E getFirst()   返回此列表中的第一个元素
            public E getLast()   返回此列表中的最后一个元素
            public E removeFirst()   从此列表中删除并返回第一个元素
            public E removeLast()   从此列表中删除并返回最后一个元素
    大家可以自己写一下Demo 
    泛型 
        概述:是JDK5中引入的特性,它提供了编译时类型安全检测机制
        泛型的好处:
                把运行时期的问题提前到了编译时期
                避免了强制转换(类似于迭代器 遍历字符串 如果时基本数据类型 int 就会报错)
        每次创建集合都会有  ArrayList<String> list=new ArrayList<>(); 
        <> 这个尖括号内的数据类型,如果不规定的话 就是Object  任何数据类型都可以   
        泛型使用的地方:
                    类后面 -》泛型类  方法声明上-》泛型方法  接口后面-》泛型接口
        

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值