集合-java(1)

集合: 分 Collection Map 两种集合

Collection:

  • 单列的  
  • 有  list   Set  两种 
  • list 

  • 分  ArrayList    LinkList ....  等
  • Set

  • HashSet    TreeSet  ..... 等

Map:

  • HashMap ...
  • 双列的

Array LIst集合

创建 Arraylist集合 创建 用 Coolection 集合创建 用的创建方式是 多态的方式

Collection 是个接口 用的是 子实现类 去实现 集合对象的创建

collection 集合 重写了 String 方法

集合的常用方法

add(元素) 增加元素

remove(元素) 删除指定元素

clear() 清空所有集合

isEmpty() 判断是不是一个空的元素

contains("")是否包含 返回值是 boolean 类型的

Collecton的遍历

package 集合1;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Collection遍历 {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();

        collection.add("你好");
        collection.add("java");
        System.out.println(collection);
        //把collection 集合转换成 数组 然后遍历
        Object[] objects = collection.toArray();
        //遍历啊
        for (int i = 0; i < objects.length; i++) {
            System.out.println(objects[i]);
        }

        //用迭代器遍历 返回这个集合的迭代元素
        Iterator<String> iterator = collection.iterator();
        System.out.println(iterator);
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

ctrl +B 查找的时候  查找源码的时候 需要明白 我们需要去找 实现类的 这个方法的源码 不是接口的

接口只是 提供 方法的不是 实现的

 迭代器的 方法 生成 集合输出集合

我们需要判断 这个集合是否有 下一个元素

若果有 就输出 元素  如果没有 就不输出了  用迭代器 遍历的

集合使用步骤 

  • 创建集合对象
  • 添加元素
  • 创建元素
  • 添加元素到集合
  • 遍历集合
  • 通过集合对象获取迭代器对象
  • 通过迭代器对象的hasnext()方法 判断是否还有元素
  • 通过迭代器对对象 输出洗一个元素 

List集合

list集合是 collection 集合的子接口  

创建 collection集合 用的是多态的创建方式 Collection c = new ArrayList<泛型>();

list  用的也是 ArrayList()集合的创建

package 集合1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class List集合 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("hellow");
        System.out.println(list);
        //list集合也重写了 我们的方法
        System.out.println("输出get()方法获取");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("迭代器遍历");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}

list  集合 可以  通过for 循环遍历  也可以 通过迭代器 遍历

for循环  通过  get() 方法输出

iterator 迭代器遍历  返回的是 迭代器的迭代子元素

并发修改数据异常

package 集合1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class 并发修改异常 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("hellow");
        System.out.println(list);
        //list集合也重写了 我们的方法
        System.out.println("输出get()方法获取");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if(next.equals("java")){
                list.add("你好");
            }
        }
    }
}

上面代码中并发修改异常  因为 迭代器遍历的时候 需要判断 实际次数 与预期次数是否相同 

初始的时候 预期次数 与实际次数都相同  经过 遍历的时候他们都是相同加加 的 

但是 中途 我们的add()方法的次数 只让 预期次数增加了 所以 次数会不相等  所以无法进行 

就形成 了并发 修改异常

解决办法:  用for循环的get(index)  获取 内容 

解决办法2: 用listiterator 列表迭代器

package 集合1;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class 列表迭代器 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("hellow");
        System.out.println(list);
        //list集合也重写了 我们的方法
        System.out.println("输出get()方法获取");
        ListIterator<String> stringListIterator = list.listIterator();
        while (stringListIterator.hasNext()){
            String next = stringListIterator.next();
            if(next.equals("java")){
                list.add("你好");
            }
        }
    }
}
//====================================列表迭代器
//        for (int i = 0; i < list.size(); i++) {
//            String s = list.get(i);
//            if (s.equals("java")){
//                list.add("你好");
//            }
//        }

//===========================for循环get(index)解决方式

列表迭代器  

它可以防止 列表迭代器  出现并发修改数据异常  

可以阻止的原因是 列表迭代器 再 add() 方法中 加 了 一个 代码 就是让 

预期次数 跟 实际次数 相同  赋值了 实际的次数 给 预期的赋值了  所以他俩想等了 

增强for

增强for  需要的是 (变量类型  变量)    集合{}

public class 增强for循环 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();
        list.add("java");
        list.add("hellow");
        for (String item : list) {
            System.out.println(item);
        }
        //循环增强for for(循环的变量类型 变量的名: 遍历的集合){
        // }
    }
}

增强for循环  实际内部还是一个  iterator 迭代器 循环

LIst集合三种遍历方式

普通for   用的是 get(index) 方法

增强for 循环 用的是 类型  变量   集合  

迭代器遍历  方式

数据结构模型

数据结构模型之栈  

栈 是 先进后出  (栈里面是栈顶元素 , 栈底元素)

队列是  先进 先出(开口   开头  前端  后端    从后端进 前端出 )

数据结构 数组

数组 查询的时候 我们可以 根据数组的索引 直接找到 数据  

数组增加删除的时候 我们需要 一次 向后移动 向前移动 然后再把数据放进去

所以 我们的数组 查询块  增删 慢  

数据结构 链表

数据结构的链表 

我们会同 头链表一次查询  从头到尾 查询过来一个位置都不能少 

增加的时候 我们 可以把链子 的节点断开 然后重新 绑定  

所以我们的链表 增删快   查询慢

ArrayList   常用    linkList 不太常用

LinkList 常用的方法  remove   add  get  等 方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值