集合知识总结

什么是集合类

JAVA中的集合类:是一种工具类,就像一个容器,储存任意数量的具有共同属性的对象。
集合的作用

  • 在类的内部,对数据进行组织;

  • 简单而快速的搜索大量的条目;

  • 有的集合接口提供了一系列有序的元素,并可以在序列中快速的插入或者删除有关元素。
    数组与集合区别:

  • 数组的长度固定,集合长度可变。

  • 数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象。

  • Collection接口

  • 是List,Set和Queue接口的父接口

  • 定义了可用于操作List,Set和Queue的方法----增删改查
    常用方法:

  • add()添加,返回boolean值

  • contains()判断集合中是否包含指定元素,返回boolean值

  • isEmoty()判断是否为空,返回boolean值

  • remover()删除元素,返回boolean值

  • size()返回集合中的元素个数

  • clear()清楚集合中的数据

  • toArray()将集合转换成Object类型数组
    Collections工具类
    方法都是用于操作Collection,全是静态的方法,用类名进行操作
    常用方法

  • binarySearch(List list, Object key) 使用二分法查找指定元素在指定列表的索引位置。

  • copy(List dest, List src(源列表)) 把源列表中的数据覆盖到目标列表中,目标列表的长度至少等于源列表。

  • fill(List list, Object obj) 使用指定对象填充指定列表的所有对象。

  • static void reverse(List<?> list) 反转指定列表中元素的顺序。

  • static void shuffle(List<?> list) 随机置换

  • sort(List list) 根据元素的自然顺序 对指定列表按升序进行排序

  • swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素
    List接口及其实现类------ArrayList

  1. List 接口是元素有序并且可以重复索引的集合,被称为序列。
  2. List可以精准的控制每个元素的插入位置,或删除某个位置元素。
  3. ArrayList-----数组序列,是List的一个重要实现类。
  4. ArrayList底层是由数组实现的
    - List常用功能:
    1.void add(int index,E element);
    2.E get(int index);
    3.E remove(int index);删除指定内容并返回删除的内容
    4.E set(int index,E element);替换原来的数据,并返回原来的数据

例题:学生选课

//课程类
public class Course{
	pubilc String id;
	public String name;
	public Course(String id,String name){
		this.id=id;
		this.name=name;
	}
}
//学生类
public class Student{
public String id;
public String name;
public Set courses;
	public Student(String id,String name){
		this.id=id;
		this.name=name;
		this.courses =new HashSet();//需要导包
}
}
//备选课程
public class ListTest{
	public List coursesToSelect;
	public ListTest(){
		this.coursesToSelect=new ArrayList();
	}
	//用于往coursesToSelect中添加备选课程
	public void testAdd(){
	//创建一个课程对象,并调用add方法,添加到备选课程List中
		Course cr1=new Course("1","数据结构");
		coursesToSelect.add(cr1);
		Course temp=(Course)coursesToSelect.get(0);
		system.out.println("添加了课程"+temp.id+":"+temp.name);
		Course cr2=new Course("2","c语言");
		coursesToSelect.add(0,cr2);
		Course temp2=(Course) coursesToSelect.get(0);
		system.out.println("添加了课程"+temp2.id+":"+temp2.name);


Course[] course={new Course("3","离散数学"),new Course("4","数学")}
//将Course数组转换成List
coursesToSelect.addAll(Arrays.asList(course));

Course temp3=(Course)coursesToSelect.get(2);
Course temp4=(Course)coursesToSelect.get(3);
system.out.println("添加了;两门课程"+temp3.id+":"+temp3.name+temp4.id+":"+temp4.name);
	}
	//获取List中的元素的方法
	public void testGet(){
	//获取长度
	int size=coursesToSelect.size();
	for(int i=0;i<size;i++){
		Course cr=(Course)coursesToSelect.get(i);
	}
	//通过迭代器(本身也是接口)来遍历List
	public void testIterrator(){
	//通过集合的iterator方法,取得迭代器的实例
		Iterator it=coursesToSelect.iterator();
		//hasNext还有元素的话返回一个真值
		while(it.hasNext()){
		Course cr=(course)it.next();
	}

	}
}
	public static void main(String[] args){
	ListTest lt=new ListTest();
	lt.testAdd();
	lt.testGet();
	lt.testIterator();
}
}

迭代器:只是用来遍历集合元素的,本身不具备存储功能,依赖某个集合存在,不能独立存在。
迭代器
迭代器是集合的一个副本
Iterator()可用于遍历集合
常用方法

  • next()返回下一个元素
  • hasNext()判断是否有元素可以获取,返回boolean值
    例子
Collection c=new ArrayList();
c.add("Hello");
c.add("World");
Iterator it=c.iterator();
while(it.hasNext()){
System.out.println("it.next()");
}//代码省略了类名跟main函数,只是简单展示迭代器的使用

迭代器并发异常
是指迭代器与实体集合不一样(个数不一样)
解决方案:

  • 在使用迭代器遍历集合的时候使用迭代器进行修改,用集合自身去修改就会报错。
  • 不用迭代器
    迭代器的添加方法
    ListIterator接口
    不能用Collection接口获取,可以用List接口获取
    如:List c=new ArrayList();
    ListIterator lit=c. ListIterator()
    List接口常用子类LinkedList用法
    LinkedList底层是链表,查询慢,增删快
    特有功能
  • void addFirst(E o)
  • void addLast(E o)
  • E getFirst()
  • E getLast()
  • E removeFirst()
  • E removeLast()

Set集合(也是一个接口)

特点:无序(存储和读取顺序可能不一样)
元素不可重复
没有索引

Map接口

map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。
Map与Collection的区别:
Map是一个双列集合,常用与处理有对应关系的数据,key是不可以重复的,也叫夫妻对集合。
Collection:是一个单列集合,它之下有不同的子体系。
Map常用功能
添加功能

  • V put(K key, V value) 将key映射到value,如果key存在,则将value覆盖并将原来的value返回

获取功能

  • V get(Object key)
  • int size() 返回对应关系的个数
  • Set keySet() 以Set的形式返回所有的Key
  • Collection values()

判断功能

  • boolean containsValue(Object value) 判断指定value是否存在
  • boolean containsKey(Object key) 判断指定Key是否存在
  • boolean isEmpty() 判断是否有对应关系

遍历功能

  • Set<Map.Entry<K,V>> entrySet()
 public static void main(String[] args) {
        Map<String,String> map1=new HashMap<String, String>();
        map1.put("后裔","嫦娥");
        map1.put("诸葛亮","黄月英");
        map1.put("刘备","老婆多");
        map1.put("张飞","大老婆");
       Set<Map.Entry<String,String>>entrys=map1.entrySet();//注意Entry是Map的内部方法需要用Map引用一下Entry
        for(Map.Entry<String,String> entry:entrys){
            String ksy=entry.getKey();
            String valus=entry.getValue();
            System.out.println("丈夫:"+ksy+"----"+"媳妇:"+valus);
        }
    }
  • Set keySet() 遍历集合
public static void main(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
        map.put("后裔","嫦娥");
        map.put("诸葛亮","黄月英");
        map.put("刘备","老婆多");
        map.put("张飞","有老婆吗");
        Set<String> keys=map.keySet();
        for(String key:keys){
            String value=map.get(key);
            System.out.println("丈夫:"+key+"----"+"媳妇:"+value);

        }

删除功能

  • void clear() 清空所以的对应关系
  • V remove(Object key) 删除指定的key对应的关系,并返回key所对应的值,删除失败返回NULL

最后:HasMap的去重跟set一样需要重写equals方法跟HashCode方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值