Java集合的练习

概述

将同一类型的元素放在一起

Collection 体系

Collection和Map为java中最高级别的两个集合抽象

Collection常用的接口为     List  Set Queue

List    有序而且允许重复

Set  无序而且不允许重复

Queue (队列)描述了FIFO(先入先出)的行为

Map  为映射  有键有值

一、List 入门

ArrayList   数组实现,随机访问效率高,随机删除或插入效率低

LinkedList      链表实现,随机访问效率低,随机删除或插入效率高

Vector    数组实现,安全性高,效率较低

add 添加

cler 清除

size有意义的元素有多少

contains;是否包含某个元素

containsAll 是否包含另一个集合

equals 两个集合是否一样

------------------------------------------------------------------

package com.mobiletrain;
import java.util.ArrayList;
public class ListPractice {
    public static void main(String[] args) {
        ArrayList<Student> students1 = new ArrayList<>();
        students1.add(new Student(100, "Jerry"));
        students1.add(new Student(100, "Tom"));
        System.out.println("students1.size: " + students1.size());
        ArrayList<Student> students2 = new ArrayList<>();
        students2.add(new Student(100, "Jerry"));
        students2.add(new Student(100, "Tom"));
        System.out.println("students2.size: " + students2.size());
        System.out.println("students1.containsAll(2): " + students1.containsAll(students2));
        System.out.println("students1.contains(...): " + students1.contains(new Student(100, "Tom")));
        System.out.println("students1.equals(2): " + students1.equals(students2));
        students1.clear();
        System.out.println(students1.size());
    }
}

isEmpty 判断集合是否为空

remove  删除元素

toArrays 转换数组(注意,转换之后的数组不能强转为范型类型,必须是Object类型的数组,可以访问某个元素时强转)

get 通过下标访问元素

subList 获取子集和,指定开始下标(包含)和结束下表(不包含)

package com.mobiletrain;

import java.util.ArrayList;

public class ListPractice2 {
    public static void main(String[] args) {
        ArrayList<Student> students1 = new ArrayList<>();
        students1.add(new Student(100, "Jerry"));
        students1.add(new Student(100, "Tom"));

        System.out.println(students1.subList(0, 2));

        System.out.println(students1.isEmpty());

        Object[] students = students1.toArray();
        for (Object student: students) {
            System.out.println(student);
        }

        System.out.println(students1.get(0));

        students1.remove(new Student(100, "Tom"));
        System.out.println(students1.size());

        students1.clear();
        System.out.println(students1.isEmpty());
    }
}

list的遍历

增强型for循环

package com.mobiletrain;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListPractice3 {
    public static void main(String[] args) {
        List<Student> students = new LinkedList<>();

        // 添加
        students.add(new Student(100, "Jerry"));
        students.add(new Student(100, "Tom"));

        // 获取
        // System.out.println(students.get(0));
        // System.out.println(students.get(1));

        // list的遍历
        // for (int idx = 0; idx < students.size(); ++idx) {
        //     System.out.println(students.get(idx));
        // }

        // list的遍历-增强性for循环
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

Set入门

哈希表

根据元素的hashCode,判断元素要放到哪一个列中 hashCode与equals 先取hashCode,如果出现了hashCode一致的元素,再进一步地判断是否equals。如果equals相等,代表已经存进去了。如果equals不相等,就把新的元素放到同样的列中 这种概念叫做桶

  • 一般情况下,树结构是有序的 将这棵树压扁,从左往右看就是有序的 如果是一棵有序树,那么每个节点的子节点。左子节点,比父节点小。右子节点,比父节点大。 树型查找又叫做折半查找、对半查找,查询效率比较高

 

package com.mobiletrain;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

// HashSet练习
public class HashSetPractice {
    public static void main(String[] args) {
        String[] numbersArr = {"one", "two", "three", "four", "five"};
        // 先把numbersArr转换成list
        // HashSet的构造器,允许接收一个Collection类型的参数
        // 把list作为Collection类型传入
        // 注意: HashSet范型所指定的类型,必须实现hashCode和equals方法
        // 注意: TreeSet范型所指定的类型,必须实现Comparable接口
        Set<String> numbers = new HashSet<>(Arrays.asList(numbersArr));
        numbers.add("six");
        numbers.add("five");

        for (String number : numbers) {
            System.out.println(number);
        }
    }
}

package com.mobiletrain;

import java.util.Set;
import java.util.TreeSet;

public class TreeSetPractice {
    public static void main(String[] args) {
        Set<Student> students = new TreeSet<>();
        students.add(new Student(100, "Jerry"));
        students.add(new Student(100, "Tom"));

        System.out.println(students);
    }
}

Collections工具类

  • reverse()

  • shuffle()

  • sort()

  • package com.mobiletrain;

    import java.util.*;

    // Collection工具类练习
    public class CollectionUtilPractice {
        public static void main(String[] args) {
            Integer[] numbersArr = {1,3,5,7,2,4,6,8};
            List<Integer> numbersList = Arrays.asList(numbersArr);

            // reverse: 反转
            Collections.reverse(numbersList);
            System.out.println(numbersList);

            // shuffle: 打乱
            Collections.shuffle(numbersList);
            System.out.println(numbersList);

            // sort: 排序
            Collections.sort(numbersList);
            System.out.println(numbersList);
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值