集合框架的基本(JCF Java Collection Framework)

集合框架(JCF Java Collection Framework)

集合--把批量的数据集中并合并在一起,进行统一性的操作

数组--集合中的一种,最简单原始的一种

数组的特点:

1.数组的元素只能存放统一性数据类型 <多态解决了>

2.数组的长度一旦确定不能更改 <封装解决了>

3.数组的元素存储在连续的空间中 <待解决>

集合框架包含三个部分:接口、实现类、算法

集合框架的接口:

两种

1----collection (接口)有 List、Set、Queue接口(队列)

List有序集合(也称为序列)。 是线性,元素可重复

Set的元素不可重复

2-----跟Map(接口)

Map对应键值对,一个元素包含两个对象,键对象不可重复

List(接口)

list也叫(线性接口),线性有序结合,集合中的元素按照放置的顺序进行计算

list实现类:Arraylist,底层依旧采用数组实现

如aad(Object o)/remove /重载方法 /get(index) /size()

含义作用
remove(index)移除元素
remove(Object o )删除掉第一次出现该元素
size查询长度,用循环遍历该元素
iterrator迭代器遍历(hasNet()判断迭代器中是否有元素,在迭代的时候用Net()抓捕元素)
add(Object o)添加
contain(Object o)查询是否有某个元素,返回布尔值
set(index,element)将某个下标的位置的元素修改
add(index,element插入某个下标的位置
indxeOf()/lastLndxe()得到第一个/最后一个索引
subList(fromIndex,toIdxe)截取索引的元素生产新的list
isEmpty判断list是否为空,返回布尔值
toString转化为字符串

List list = new ArrayList();
list.add(111);   //添加
list.add("你好");
list.add(true);
System.out.println(list.get(2));
list.remove(2); //移除
System.out.println(list.size());//查询长度
Iterator iterator = list.iterator();
while (iterator.hasNext()){   //遍历每一个元素
    Object o = iterator.next();  //遍历的同时赋值给o
    System.out.println(o);
}

泛型

由于list集合中保存的是Object的类型,当我们使用的时候,容易造成类型转换出错,然后泛型就出现了

泛型;指定放某一个类型的元素,避免出现类型转换异常。

List<元素类型> 变量名 = new ArrayList<元素类型>; //只能添加元素类这一种元素,否则编译不通过。

eg: List<String> list = new ArrayList<String> ()// 只能放Sting类型的数据

List<String> list1 = new ArrayList<String>();
list1.add("11");
list1.add(123);//会报错

Comparator方法

List<Employee> list = new ArrayList<>();
list.add(new Employee("张三", 1000, 20));
list.add(new Employee("李四", 10000, 21));
list.add(new Employee("王五", 2000, 30));
list.add(new Employee("赵六", 4000, 25));
list.add(new Employee("我", 100000, 23));
for (Employee e: list){
    System.out.println(e);
}
list.sort(new Comparator<Employee>() {
    @Override
    public int compare(Employee o1, Employee o2) {
        return (int) (o1.getMoney()-o2.getMoney());
    }
});
System.out.println();
for (Employee e: list){
    System.out.println(e);
}

Set(接口)

元素不重复

set接口现实类,利用元素的hashCode和equals方法,判断集合中的元素是否重复,如果希望按照元素的属性值去除重复数据,需要重写hashCode和equals方法

方法解释
add(Object)向集合添加元素
remove(Object)将元素从集合移除
size集合的长度
isEmpty()判断是否为空

普通for循环不能来遍历SetHash的遍历

Set接口的元素排列方式是无序、不可重复的。

第一种排序方式

使用去重时,要重写hashCode和equals方法,可以快速生成。

第二种排序方法:

需要在类里面使用Comarable接口,然后重写他的方法,修改返回值,大于0 则是从大到小,小于0则是从小到大,0则是去重

Set<Employee> set = new TreeSet<>();
set.add(new Employee("大龙",2600,20));
set.add(new Employee("小龙",2000,28));
set.add(new Employee("张三",2400,21));
set.add(new Employee("李四",2000,20));
set.add(new Employee("李四",2200,23));
set.add(new Employee("大尼",2000,27));
set.add(new Employee("小尼",2100,20));
​
for (Employee o : set){
    System.out.println(o);

第三种方式:

在里面new一个Comparator方法,然后改一下返回值即可,需要在类里面使用Comarable接口,然后重写他的方法,修改返回值,大于0 则是从大到小,小于0则是从小到大,0则是去重

总结:HashSet:按照元素的Hash码排序,速度块

TreeSet:按指定的排序规则对元素进行排序,速度慢。需要由Comparator比较器指定排序规则。当Comparator比较器的compare方法,返回0时,表示元素重复。

Map(映射) key- Value,键值对形式

Map(接口)不是Collection的子接口,Map接口实现类中,一个元素包含两个对象:键对象跟值对象

演示代码:Map<String, Integer>map; String为键对象,Integer为值对象。

put(key,value)解释
get(Objet o)输出值对象
containsKey(Objet o)查看元素存不存在,是空则返回false,否则true
remove(Objet o)移除某个元素
keySet()得到键对象集合,返回set集合 Set<String> keySet = map.keySet();
values()得到值对象集合,返回Collection集合 Collection<Employee> employees = map.values();
clear()清除所有的键值对

Map<String, Employee> map = new HashMap<>();
//put(k,v) 当k不同时是添加,相同是是覆盖/修改
map.put("学生", new Employee("张三", 200, 20));
map.put("学生", new Employee("张三", 2000, 20));
map.put("学生1", new Employee("张三", 2000, 20));
map.put("学生2", new Employee("张三", 2100, 20));
map.put("学生3", new Employee("张三", 2000, 20));
System.out.println(map.get("学生")); // 输出该键对象的值对象
​
System.out.println(map.containsKey("学生"));//查看是不是为空,是空则返回false,否则true
​
map.remove("学生");  //remove(k) 移除元素
System.out.println(map.containsKey("学生"));
​

遍历map有两种:

1.用keySet()方法可以得到键对象集合

2.用values()方法可以得到Collection集合

Set<String> keySet = map.keySet(); //得到键对象集合,返回set集合
Collection<Employee> employees = map.values(); //得到值对象集合,返回Collection集合
​
// map集合的遍历
//        通过键对象进行遍历
        for (String v : keySet){
            System.out.println(v+"+"+map.get(v)); //可以输出全部键和值对象
        }
        // map集合的遍历
//        通过值对象进行遍历
        System.out.println("-----------------------------------");
        for (Employee v : employees){
            System.out.println(v);    //只能输出值对象
        }

工具类

1.Arrays工具

可以直接添加到list里面去,不用add一个个加,节省时间。

List<String> list = Arrays.asList("你好", "我好", "他好");  //直接添加到list里面去,不用add一个个加
        List<com.Project.HomeWork.Employee> list1 = Arrays.asList( new Employee("小杜", 25, 300),
               new Employee("小明", 3000, 24),
               new Employee("小圈", 300, 24),
               new Employee("小伟", 1000, 24));

2.Collection工具

1----- reverse(List)集合元素倒序排列,没有返回值,直接用Collections.reverse(list); 只能在List集合用

2----- shufflle(List):随机排列元素

llections.shuffle(list);只能在List集合用,没有返回值,直接用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值