Java之集合

一、集合体系

1、介绍

Collection: 单列集合
	    子接口: List :  ArrayList  LinkedList
		       Set : HashSet  TreeSet
            
Map: 双列集合
		子接口: HashMap  TreeMap
            
            
    操作集合的工具类
    Collections
    Arrays

2、List体系

1、ArrayList

1. 容量可变,添加和删除元素时不需要改变数组大小
2. 可以通过迭代器遍历元素

//常用方法:
		add():添加元素
        remove():删除元素
        get():获取元素
        contains():判断元素是否存在
        iterator():获取迭代器
        size():获取元素数量
        clear():清空元素
        toArray():将集合转换为数组

2、LinkedList

1. LinkedList 是一个基于链表实现的队列

//常用方法:
        iterator().next():获取迭代器的下一个元素
        iterator().remove():删除迭代器的下一个元素
        iterator().hasNext():判断迭代器是否还有下一个元素
        addFirst():添加第一个元素	
        addLast():添加最后一个元素

3、ArrayList 和 LinkedList 的区别

1、都可以存储任意类型的数据
2、都是有序的
3ArrayList 采用数组存储,因此插入和删除操作比较慢,但查找速度比较快
4LinkedList 采用链表存储,因此插入和删除操作比较快,但查找速度比较慢

安全性:
		ArrayList 是线程不安全的,因此在多线程环境下,需要对 ArrayList 进行同步处理,否则会出现数据不一致的问题.
		LinkedList 是线程安全的,因此在多线程环境下,不需要对 LinkedList 进行同步处理,因此性能会更好.

4、Set体系

1、HashSet

介绍
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

HashSet 允许有 null 值。

HashSet 是无序的,即不会记录插入的顺序。

HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
常用方法
add():添加元素
remove():删除元素
get():获取元素
contains():判断元素是否存在
iterator():获取迭代器
size():获取元素数量
clear():清空元素
toArray():将集合转换为数组

5、Map体系

5.1、HashMap

介绍
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。

HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

HashMap 是无序的,即不会记录插入的顺序。

HashMap 继承于AbstractMap,实现了 MapCloneablejava.io.Serializable 接口。
常用方法
put()将键/值对添加到 hashMap 中
get()获取指定 key 对应对 value
values()返回 hashMap 中存在的所有 value 值。
remove()删除 hashMap 中指定键 key 的映射关系
clear()删除 hashMap 中的所有键/值对

6、向上向下转型

1、向上转型

Human h=new Human();
h.eat();//人类
Animal a=new Animal();
a.eat();//动物
//父类-Human,子类-Animal,a-父类引用,new Human()-子类对象
Animal a=new Human();//向上转型

转型之后方法和属性的调用:
		a可以调用子类和父类公用的方法(如果子类重写了父类的方法,则调用子类的方法),子类特有的方法无法调用。
		a可以调用父类的属性,不可以调用子类的属性。

2、向下转型

Father f=new Son() //先向上转型
Son s=(Son) f;//再进行向下转型,进行强制转换,子类引用s,父类引用f

向下转型的条件:先向上转型,再向下转型。没有经过向上转型,会提示编译错误。
转型之后方法和属性的调用:
		可以调用子类的所有方法,和属性,类型转为子类,
		调用的属性为子类的属性。

7、泛型

1、概念

在类定义的时候,不会给类中的变量,类中的方法参数以及方法的返回值定义数据类型,而在实例化对象的时候才会确定数据类型

2、好处

代码量减少,节省了内存资源消耗(省略了向上下转型),还会让数据更加安全(规定了输入的类型)

3、泛型符号

K:key代表键的数据类型
V:value代表值的数据类型
TType的简写,代表元素的类型
EElement的简写,代表元素,是一种符号,占位符

4、自定义泛型

//不能在静态方法使用
//可以在类,成员变量,方法参数,方法返回值,接口上使用
public class Stu<T>{}T id;	成员变量
public T buy(T money){}	方法参数,返回值
public interface a<T>{}	接口
public class d implements a<String>	实现接口

2、泛型的上下限

< ? extends k , ? extends v > 上限
< ? super k , ? super v > 下限
//?是对象,T是数据类型
    
public void eat(List<? extends Pet> list){}  //传过来的对象必须是Pet的子类或Pet
public void eat(List<? super Pet> list){}    //传过来的对象必须是Pet的父类

5、collections工具类

Collections.方法名
方法:
排序:sort(集合名)
最大值:max(集合名)	返回最大值
最小值:min(集合名)		返回最小值
查找:
使用前需先排序
binarySearch(集合名,)	返回索引值
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值