第十章 集合类

1.编写程序测试Java集合框架中各种常用类的基本操作(包括添加元素,删除元素,遍历集合元素等)

  • Collection:Collection是集合类的基本接口,它用来说明作为一个集合类应有的结构特征属性和带有共性的操作方法,有三个子接口

    • List
      • ArrayList:add(E e),add(int index, E element), get(int index),remove(int index), remove(Object o)
      • LinkedList:addFirst(E e),addLast(E e),get(int index), removeFirst(), removeLast()
    • Set
    • Queue
  • Iterator:对集合类遍历的接口

    • hasNext()
    • next()
  • ListIterator

    • hasPrevious()
    • previous();
import java.util.*;
public class TestSort{
 public static void main(String[] args){
     int sum=0;
     ArrayList<Integer> al = new ArrayList<Integer>();
        al.add(1);
        al.add(4);
        al.add(Integer.parseInt("8"));
        al.add(Integer.valueOf("9"));
        al.remove(0);
        Iterator<Integer> ir=al.iterator();
        System.out.println(al.get(0));
        while(ir.hasNext()){
            Integer i = ir.next();
            System.out.println(i);
        }
        System.out.println(sum); 

        LinkedList<String> ll = new LinkedList<String>();
        ll.add("h");
        ll.add("haha");
        ll.add(Integer.toString(9));
        ll.addFirst("first");
        ll.removeLast();
        Iterator<String> ir2=ll.iterator();

        while(ir2.hasNext()){
            String i = ir2.next();
            System.out.print(i);
        }
        
 }
}

  • Map:Map接口用于将一个键(Key)映射到一个值(Value),且不允许有重复的键,每个键最多映射到一个值。
    • Set keySet()方法获取的是映射中关键字集合的一个Set引用
    • Collection values()方法返回映射中值集合的一个Collection引用
    • Set<Map.Entry<K,V>> entrySet()方法返回一个Set。
import java.util.*;
class Counter{
  int i=1;
  public String toString(){
    return Integer.toString(i);
  }
}

public class Statistics{
    public static void main(String[] args){
        Hashtable<Integer,Counter> ht=new Hashtable<Integer,Counter>();
        for(int i=0;i<10000;i++){
        Integer r=(int)(Math.random()*20);
        if(ht.containsKey(r))
        ht.get(r).i++;
        else
        ht.put(r,new Counter());
        }
        //遍历集合对象
        //方法1:将entry作为一个整体进行遍历
        Set<Map.Entry<Integer,Counter>> entries = ht.entrySet();
        Iterator<Map.Entry<Integer,Counter>> iter = entries.iterator();
        while(iter.hasNext()){
            Map.Entry<Integer,Counter> map = iter.next();
            Integer inte = (Integer)map.getKey();
            Counter value = (Counter)map.getValue();
            System.out.println(inte+" = "+value);
        }
        //方法2:单独取出key集合,遍历key时,取出key所对应的value
        Set<Integer> key = ht.keySet();
        Iterator<Integer> iter2 = key.iterator();
        while(iter2.hasNext()){
            Integer i = iter2.next();
            Counter c =ht.get(i);
            System.out.println(i+" = "+c);
        }
    }
}


总的来说,Map接口可以通过一些方法(keySet(),entrySet()和values())产生Collection对象,而Collection接口可以通过iterator()方法产生Iterator对象,用于集合的遍历。
2.如何实现集合对象排序
Collections 类是 Java 提供的一个操作 Set、List 和 Map 等集合的工具类。Collections 类提供了许多操作集合的静态方法,借助这些静态方法可以实现集合元素的排序、查找替换和复制等操作。调用其sort方法进行排序, sort(List<T> list, Comparator<? super T> c)
集合对象排序接口为Comparator,通过实现其中的compare方法来定义自己的排序方法。
定义一个复数类并按照复数实部排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;

public class Complex {
    int a;//实部
    int b;//虚部
    Complex(int aa,int bb){
        this.a=aa;
        this.b=bb;
    }
    public static void main(String[] args){
        Complex x = new Complex(3, 4);
        Complex y = new Complex(1, 2);
        Complex z = new Complex(8, 2);
        ArrayList<Complex> al = new ArrayList<Complex>();
        al.add(x);
        al.add(y);
        al.add(z);
        Iterator<Complex> ir=al.iterator();
        while(ir.hasNext()){
            Complex c = ir.next();
            System.out.println(c.b+"+"+c.a+"i");
        }
        //匿名内部类
        Collections.sort(al,new Comparator(){
            public int compare(Object c1,Object c2){
                return ((Complex)c1).a-((Complex)c2).a;
            }
        });
        //排序后
        Iterator<Complex> ir2=al.iterator();
        while(ir2.hasNext()){
            Complex c = ir2.next();
            System.out.println(c.b+"+"+c.a+"i");
        }
    }
}

3.ArrayList和LinkedList比较
在这里插入图片描述
Vector和ArrayList的比较
在这里插入图片描述
Hashtable和HashMap的比较
在这里插入图片描述
TreeMap和HashMap的比较
在这里插入图片描述

4.遍历一个集合对象

  • 使用for循环语句,用get(index)方法
  • 使用foreach语法 for(MyObject o : c)
  • 使用Iterator接口
 Iterator it = c.iterator(); 
 while(it.hasNext()){
   MyObject o  = (MyObject)it.next();
   ……
}

4.Collections和Collection各自的功能是什么?
Collections和Collection是两个不同的概念,前者是一个工具类,通过一些静态方法,完成集合类的一些操作功能,后者是集合接口,用来说明作为一个集合类应有的结构特征属性和带有共性的操作方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值