java小白——集合框架

1、集合框架概述:

特点:

①可以存储不同的数据类型

②长度动态的

③内存空间不一定是连续的

④只能存储对象

Collection为集合层级的根接口。

Set是一个不能包含重复元素的集合;
List是一个有序集合,可以包含重复元素;

Map是一种key-value(键值对)结构的集合模型,不能包含重复的key值,每个key只能映射到一个value。

2、Collection中的一些方法的使用:

        //Collections 使用
        //随机排列集合中的元素
        Collections.shuffle(list);
        System.out.println(list);
        //将集合中的元素替换一个相同的元素
//        Collections.fill(list,100);
//        System.out.println(list);
        //打印集合中指定元素的个数
        int frequency = Collections.frequency(list,1);
        System.out.println(frequency);

        //将集合中的元素反转
        Collections.reverse(list);
        System.out.println(list);

        //交换集合中的两个元素位置
        Collections.swap(list,1,2);
        System.out.println(list);

        //将集合中的元素平移指定位数,(正数向右平移,负数向左平移)
        Collections.rotate(list,1);
        System.out.println(list);

        ArrayList list1 = new ArrayList();
        for(int j = 5; j < 15; j++ ) {
            list1.add(j);
        }
        //第二个集合中的元素会把第一个集合中的元素覆盖掉(第二个集合的长度不能大于第一个集合)
        Collections.copy(list1,list);
        System.out.println(list1);

3、list:

  • List接口的实现类:
    * 1.ArrayList(底层为数组结构)
    * 查、改效率高
    * 2.LinkedList(底层为双向链表)
    * 既能向后找,也能向前找(记住前一个的地址,也记住后一个地址)。
    * 增、删效率高
    * 3.Vector(底层为数组结构、线程安全(一个时间只能有一个线程进行,其他进程 只能排队等待)、访问效率低)
        ArrayList list = new ArrayList();//给出了默认长度0
        //1.添加元素
        /**
         * add:
         *  1、现将底层数组扩容(超出初始数组长度)
         *  2、将元素赋值到数组对应位置
         *  3、返回true
         * */
        list.add(10);
        list.add("abc");//可以存不同的引用(对象)数据类型
        list.add(0,3);//(为指定位置插入元素,只能挨着插入,不能跨越式插入)把12插入第0个位置
        list.add(0,3);
        //获取元素
        /**
         *
         * */
        System.out.println(list.get(0));

        //修改元素
        /**
         * 返回值是修改之前的值
         * */
        Object e = list.set(1,"first");
        System.out.println(list.get(1));
        System.out.println(e);
        //删除元素
        //按照下标删除,返回值是删除之前的元素
        list.add(0,3);
        /**
         * 如果元素为整数,
         * remove的参数为int,按照下标删除;
         * 参数为integer,就是按照元素删除
         * 装箱(把int转换为integer);拆箱(把integer转换为int)
         * */
        //按照元素值删,返回的是Boolean类型的值
        Object element = list.remove(new Integer(3));//按照元素删,一次只能删除最左边的一个对应元素。

Iterator(迭代器):

//迭代器:将Collection集合的遍历统一起来
        Iterator<String> iterator = list.iterator();
        //判断是否有下一个元素,并没有真正获取值
        iterator.hasNext();
        boolean hasNext = iterator.hasNext();
        //如果有,返回true,如果没有,返回false
        System.out.println(hasNext);
        //获取下一个元素
        iterator.next();
        /**
         * 通过迭代器删除元素,不会影响整个遍历过程
         * */
        while (iterator.hasNext()) {
            String e = iterator.next();
            //删除当前迭代到的对象
//            iterator.remove();
            System.out.println(list.size());
        } //一次迭代完成,迭代器指针指向最末,想要继续迭代,需要重新创建迭代对象
        System.out.println(list.size());
        //list 集合  独有的迭代器
        ListIterator<String> listIterator = list.listIterator();
        System.out.println("----------------");
        while(listIterator.hasNext()) {
            System.out.println(listIterator.next());
        }
        System.out.println("-------------");
        while(listIterator.hasPrevious()) {
            System.out.println(listIterator.previous());
        }
        //listIterator独有的一些方法
//        listIterator.add("liguocheng");
//        listIterator.previousIndex();
//        listIterator.next();
        //其他对象方法
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("aa");
        list1.add("bb");
        list1.add("bb");
        list1.add("cc");
        list1.add("dd");
        //根据元素获取下标,第一次出现时的下标
        //返回值为-1,说明该元素不存在
        int index = list1.indexOf("bb");
        System.out.println(index);
        System.out.println(list1.lastIndexOf("bb"));
        list1.contains("aa");//是否包含该元素
        System.out.println(list1.contains("aa"));
        boolean contains = list1.contains("bb");
        System.out.println(contains);
        list1.isEmpty();//判断是否为空集合:true 代表里面没有元素,false 代表里面有元素。
        System.out.println(list1.isEmpty());

        //删除里面的所有元素
        list1.clear();
        System.out.println(list1.isEmpty());
        

数组和集合之间的转换

 //数组和集合之间的转换
        Object[] array = list1.toArray();

        for(Object o : array) {
            System.out.println(o);
        }
        String[] arr = new String[list1.size()];
        list1.toArray(arr);
        System.out.println("-----------");
        for(String str : arr) {
            System.out.println(str);
        }

aslist的作用:
 /**
         * aslist: 如果参数为基本数据类型数组
         * 将整个数组作为集合的一个元素加入返回值的集合中
         * 如果是对象类型的数组,将数组中的元素转换到集合中
         * */
        int[] array_int = {1,2,3};
        List list = Arrays.asList(array_int);
        System.out.println(list);
        Integer[] array_integer = {1,2,3};
        List list3 = Arrays.asList(array_integer);
        System.out.println(list3);

Set(集合):

特点: ①集合是没有角标的

​ ②集合中不能放置重复的对象(可以用来去重)

​ ③不允许连续调用两次remove,在调用一次remove之后,需要先调用一次next之后再remove。

public class Main {

    //容器 java 给出的承载对象类型的一种ADT
    //abstract date type

    public static void main(String[] args) {

        Set<String> myset = new HashSet<>();//HashSet 是无序的 LinkedHashSet (链表哈希算法,按添加顺序加入,无下标)
        myset.add("liguocheng");
        myset.add("liguocheng"); //Set中不能存放相同的元素,因为Set中没有角标
        myset.remove("liguocheng");
        System.out.println(myset.size());
        myset.add("aaaaa");
        myset.add("aaabzxvzc");
        myset.add("aaacsdds");
        myset.add("adfdfda");
        myset.add("afdfa");
        System.out.println(myset.size());
        myset.remove("aaaaa");
        System.out.println(myset.size());
//        for(String item : myset) {
//            System.out.println(item);
//        }

        Iterator<String> iterator = myset.iterator();
        iterator.next();
        iterator.remove();
        for(String item : myset) {  //foreach底层使用的是迭代器(用while循环)
            System.out.println(item);
        }
        
    }

Map:

public class Main {

    public static void main(String[] args) {

        //放置内容的时候,是用的是单一的泛型来确定放置的内容是什么类型
        List<String> lists = new LinkedList<>();
        lists.add("liguocheng");
        lists.add("wangbin");
        lists.get(0);

        //map中存的是K-V(键值对)对, 我们放置的时候,确定一下key值和V值,这两值一一对应,
        //当我们取值地时候,是用的是key值来取出V值

        //map叫做映射表
        Map<String,String> map = new HashMap<>();
        //map中的定位,求长,替换

        map.put("liguocheng","wangbin");
        System.out.println(map.get("liguocheng"));//通过key值定位,获取值
        //map中的key值不能重复,若重复了则会覆盖掉之前的V值
        System.out.println(map.size());

        System.out.println(map.containsKey("liguocheng"));//查询的是一个对象
        System.out.println(map.isEmpty());//判断是否有值

        //将map中的值放入list中(使用vaules方法),之后便可以使用角标获取值
        List<String> list = new ArrayList<>();
        list.addAll(map.values());
        System.out.println(map.get(0));

        //map中的方法:确认是否有键值,确认是否有值,确认是否为空,长度,放置内容,取出内容,删除内容,转换容器等方法

        Set<String> keys = map.keySet();//这个set是hashset
        for(String item : keys) {
            System.out.println(item + ":" + map.get(item));
        }                        //叫做纵切遍历方式(先把key的那一列当做set拿出来,后面的value值也就对映拿出来了)

        Set<Map.Entry<String,String>> entries = map.entrySet();
        for(Map.Entry<String,String> item : entries) {
            System.out.println(item.getKey() + ":" + item.getValue());
        }                        //横切遍历方式(每次拿出它的键值对)
        System.out.println();
    }

栈:

public class MySort {

    public static void main(String[] args) {

        Integer[] i = {1,2,3,4,5};
        //Arrars.copyof 方法 就算超出数组长度也不会出错,只会补上默认值
        System.out.println(Arrays.toString(Arrays.copyOf(i,10)));

        System.out.println(Arrays.toString(Arrays.copyOfRange(i, 2, 4)));


        Stack<String> strings = new Stack<>();
        strings.push("liguocheng");
        strings.push("wangyanwei");
        strings.push("wangyongjie");
        strings.push("zhangaoqi");
        strings.add("wangbin");

        //pop  弹出栈顶元素,改变了栈长度
        //peek  取到栈顶元素,不改变栈长度
        System.out.println(strings.size());
        System.out.println(strings.pop());
        System.out.println(strings.size());
        System.out.println(strings.peek());
        System.out.println(strings.size());

        //遍历栈元素
        for(String s : strings) {
            System.out.println(s);
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值