第二章 集合框架

 集合         

           定义:如果一个类是专门用来存放其他类对象的,则这个类有一个另外特殊的词叫做集合

            容器和类的关系:集合一定是类,但类不一定是集合

    Collection 接口

            List接口:线性表

                           有序,允许重复

                           实现类:ArrayList linkedList

import java.util.ArrayList;

/*
 * ArrayList:
 * 		1.长度可变的动态数组(下标从0开始) 
 * 		2.对查询和随机访问性能高
 */
public class D1 {
	public static void main(String[] args) {
		// 创建ArrayList集合
		ArrayList list = new ArrayList();
		// 增加----集合可以存储任意数据
		list.add("墨渐生微"); // 参数为Object对象--参数的多态
		list.add("Dream");
		list.add(0, "Hello"); // 以下标存储对象
		// 删除
		list.remove(2); // 以下标删除元素
		list.remove("墨渐生微");
		// 修改
		list.set(0, "生命");
		// 遍历
		for (int i = 0; i < list.size(); i++) {
			/*
			 * size()方法可获取集合的长度 get(int index) 方法是以下标获取集合元素
			 */
			System.out.println(list.get(i));
		}
		// 判断是否存在传入元素
		System.out.println(list.contains("生命"));
		// 判断集合是否为空?
		boolean flag = list.isEmpty();

		if (!flag) {
			// 清空集合!!!
			list.clear();
		}
	}
}
import java.util.LinkedList;

/*
 * LinkedList:
 * 		1.采用链表保存元素
 * 		2.新增、插入、删除效率较高
 */
public class D2 {
	public static void main(String[] args) {
		// 创建LinkedList集合
		LinkedList list = new LinkedList();
		// 增删改查---LinkedList与ArrayList的基本方法相同
		list.add("墨渐生微");
		list.add(1,"加油");
		list.set(0,"Dream");
		list.remove(0);
		// LinkedList特有的方法
		list.addFirst("Future"); // 在集合首添加元素
		list.addLast("梦想"); // 在集合尾添加元素
		System.out.println(list.getFirst()); // 获取第一个元素 
		System.out.println(list.getLast()); // 获取最后一个元素
		list.removeFirst(); // 删除第一个元素
		list.removeLast(); // 删除最后一个元素
		
		for (Object object : list) {
			System.out.println(object);
		}		
	}
}

           

            Set接口:集合

                           无序,不允许重复

                           实现类:TreeSet HashSet

import java.util.HashSet;

/*
 * HashSet:
 * 1.Set是集合,所以没有下标
 * 2.集合无序,唯一
 */
public class D3 {
	public static void main(String[] args) {
		// 创建HashSet集合
		HashSet set = new HashSet();
		// 增删查
		set.add("春天");
		set.add("夏天");
		set.add("秋天");
		set.add("冬天");
		set.add("冬天");//set唯一
		set.add("Dream");
		set.remove("Dream");
		
		System.out.println("数据个数:"+set.size());
		// 遍历一
		for (Object object : set) {
			System.out.println(object);
		}
		
		// 遍历二
		Object[] obj = set.toArray();  //  将HashSet集合转换成数组
		for (int i = 0; i < obj.length; i++) {
			System.out.println(obj[i]);
		}
	}
}

 

Map接口

               定义:既保存数据本身,也保存数据的主键的一种接口

               实现类:HashMap TreeMap

import java.util.HashMap;
import java.util.Set;

/*
 * map无序且key唯一,保存映射关系的数据,即键值对(key-value)存储数据
 * HashMap
 */
public class D4 {
	public static void main(String[] args) {
		// 创建HashMap集合
		HashMap map = new HashMap();
		// 增加
		map.put(1, "鼠");
		map.put(2, "鼠");
		map.put(3, "牛");
		map.put(4, "虎"); // key 唯一
		map.put(2, "牛");
		// 长度
		System.out.println(map.size());
		// 删除(通过key进行删除)
		map.remove(4);
		// 清空
		// map.clear();
		// 判断key或value是否包含
		System.out.println(map.containsKey(1));
		System.out.println(map.containsValue("虎"));
		// 通过key获取到对应的value
		System.out.println(map.get(2));

		// 获取所有key
		System.out.println("默认获取到所有key" + map.keySet());
		// 获取所有value
		System.out.println("默认获取所有value" + map.values());

		// 遍历
		Set set = map.keySet(); // 获取所有的key并存入Set集合中
		Object[] obj = set.toArray(); //  将Set集合转换成数组
		for (int i = 0; i < map.size(); i++) {
			// 以数组的键值作为参数遍历map集合
			System.out.println(map.get(obj[i]));
		}

	}
}

 

Iterator接口:利用该接口提供的方法可以遍历所有容器中的元素

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;

/*
 * 迭代
 * 1.集合.Iterator( )方法获取迭代器,返回Iterator类型引用
 * 2.引用.hasNext( )方法判断是否有下一个值
 * 3.引用.next( )方法获取下一个元素
 * 
 * 泛型:在集合实例化时指定集合的元素类型
 */
public class D5 {
	public static void main(String[] args) {
		// 多态引用
		List<Integer> list = new LinkedList<Integer>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		// 遍历
		Iterator<Integer> iterator = list.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}

		Map<Integer,String> map = new HashMap<Integer,String>();
		map.put(1, "10");
		map.put(2, "20");
		map.put(3, "30");
		map.put(4, "40");
		map.put(5, "50");
		map.put(6, "60");
		// map 没有Iterator迭代器,所以需要将借助Set
		Set<Integer> set = map.keySet();
		iterator = set.iterator();
		while (iterator.hasNext()) {
			System.out.println(map.get(iterator.next()));
		}

	}

}

 

hashCode()和equals()方法

          基于哈希表实现的集合类型,为避免哈希冲突,需要重写hashCode()和equals()方法

Collections:该类提供了对Collection接口实现的排序、倒置、查找等功能

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

/*
 * Collections工具类
 */
public class D1 {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		list.add(10);
		list.add(20);
		list.add(6);
		list.add(66);
		list.add(12);
		list.add(88);
		
		// 排序(升序)
		Collections.sort(list);
		
		Iterator<Integer> iterator  = list.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		
		// 反转
		Collections.reverse(list);
		iterator = list.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}
		// 填充
		Collections.fill(list, 0); // 集合所有元素都是0
		
		// 最大最小值
		Collections.max(list);
		Collections.min(list);
		
		// 洗牌
		Collections.shuffle(list);
	}
}

 

排序规则接口接口

   Comparable :  定义默认排序规则

   Comparator : 定义临时排序规则

        通过接口的方法可以制定出对象之间比较的标准;凡是需要进行对象的比较排序均可以实现接口


/**
 *  学生类
 */
public class Student implements Comparable<Student>{
    private String name;
    private int score;

    public Student() {
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }

    /*
      重写Comparable接口的方法,定义默认排序规则,按照name进行排序
     */
    @Override
    public int compareTo(Student o) {
        return this.name.compareTo(o.name);
    }
}
import java.util.Comparator;

/**
 *  Student类的临时排序规则
 */
public class SortScore implements Comparator<Student> {

    // 重写Comparator接口的方法,定义临时排序规则,按照成绩进行排序
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getScore()-o2.getScore();
    }
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 *  集合排序规则测试
 */
public class Test {
    public static void main(String[] args){

        List<Student> stus = new ArrayList<Student>();
        stus.add(new Student("Myth",88));
        stus.add(new Student("Lisa",45));
        stus.add(new Student("Abo",56));
        stus.add(new Student("Huilin",76));

        // 输出排序前的集合
        for (Student student : stus) {
            System.out.println(student);
        }
        System.out.println("-------------------------");
        /******************* 测试集合的默认排序规则 : begin*******************/
        // 按照name进行排序
        Collections.sort(stus);
        
        // 输出按照name排序后的集合
        for (Student student : stus) {
            System.out.println(student);
        }
        System.out.println("-------------------------");
        /******************* 测试集合的默认排序规则 : end*******************/

        /******************* 测试集合的临时排序规则 : begin*******************/
        // 按照成绩进行排序
        Collections.sort(stus,new SortScore());
        // 输出按照score排序后的集合
        for (Student student : stus) {
            System.out.println(student);
        }
        System.out.println("-------------------------");
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值