java集合框架和泛型

---恢复内容开始---

  

集合:用来存储多个元素

数组和集合区别:

  •   数组的长度是固定的;集合的长度是可变的
  •   数组存储的类型是同一类,可以存储基本数据类型;集合存储的都是对象,对象类型可以不一致

java集合类主要由Map接口和Collection接口派生而来,Collection接口有两个常用的子接口,List接口和Set接口,所以通常说java集合框架由三类大接口组成(Map接口、List接口、Set接口)

List接口的特点单列集合 

  1.存储的元素可以重复  

  2.元素有下标(有索引)可以通过普通for循环遍历 

  3.元素有序

Set接口的特点单列集合 

  1.存储的元素不可以重复  

  2.元素没有下标(无索引)不可以通过普通for循环遍历  

  3.元素无序

Map接口的特点双列集合 

  1.存储的元素包含两个值  

  2.key和value的数据类型可以相同也可以不同  

  3.key不允许重复,value可以重复  

  4.key和value存在一一对应关系

  List接口有两个实现类,ArrayList和LinkedList  Set接口也有两个实现类,HashSet和TreeSet  Map的实现类为HashMap

  Map、List和Set都是接口,不能创建对象,所以在使用接口的时候可以通过多态的方式创建对象(前父后子),而ArrayList和LinkedList是List的实现类,HashSet和TreeSet是Set的实现类,HashMap是Map的实现类,它们都是类,所以在使用它们的时候可以直接创建对象

  泛型:

    创建对象的时候可以将对象的类型作为参数,指定到其他类或者方法上,也就是可以约束集合内的元素类型

    eg:ArrayList<String> list=new ArrayList<String>();

  上述代码表示创建一个ArrayList集合,但规定该集合中存储的元素类型必须为String类型(约束了集合内的元素类)

创建对象的语法:类1或者接口<类型实参> 对象=new 类2<类型实参>();

  “类2”可以是“类1”本身,可以是“类1”的子类,还可以是接口的实现类;“类2”的类型实参必须与“类1”中的类型实参相同,“类2”的类型实参也可以省略

创建对象:

  通过多态的方式创建对象  eg:List<String> list=new ArrayList<String>(); (父:List, 子:ArrayList )

  直接创建对象:  eg:ArrayList<String> arr=new ArrayList<String>();

使用ArrayList存储数据:元素增删慢,查找快

  boolean add(Object o)方法         添加元素o

  void add(int index,Object o)        在指定索引位置添加元素

  int size()                    返回元素个数

  Object get(int index)            返回指定索引位置的元素

  void set(int index,Object obj)         将index索引位置的元素替换为obj元素

  boolean contains(Object o)         判断列表中是否存在指定元素o

  int indexOf(Object obj)           返回元素在集合中出现的索引位置

  boolean remove(Object o)        从列表中删除元素o

  Object remove(int index)        从列表中删除指定索引位置的元素

使用LinkedList存储数据:方便添加元素、删除

  void addFirst(Object obj)        将指定元素插入到当前集合的首部

  void addLast(Object obj)        将指定元素插入到当前集合的尾部

  Object getFirst()           获得当前集合的第一个元素

  Object getLast()           获得当前集合的最后一个元素

  Object removeFirst()         移除并返回当前集合的第一个元素

  Object removeLast()         移除并返回当前集合的最后一个元素
 
使用HashSet存储数据:查询速度非常快
 
  boolean add(Object o) 如果Set中尚未包含指定元素o,则添加指定元素
  void clear() 从Set中移除所有元素
  int size() 返回Set中的元素的数量(Set的容量)
  boolean isEmpty() 如果Set不包含任何元素,则返回true
  boolean contains(Object o) 如果Set包含指定元素o,则返回true
  boolean remove(Object o) 如果指定元素o存在于Set中,则将其移除
 
使用HashMap存储数据:查询指定元素效率高
  Object put(Object key,Object value)  放入键和值
  Object remove(Object key)      移除与指定的key相关的映射,并返回该key关联的旧value,key不存在返回null
  Object get(Object key)        获取与key相关的value,如果该key不关联任何非null值,返回null
  boolean containsKey(Object key)    判断集合是否存在key
  Set keySet()              获取所有key的集合
 
  
 
迭代器Iterator:Collection集合元素通用的获取元素(是一个接口,属于集合的一部分)
  迭代器的原理:hasNext()方法判断集合中是否存在元素,用next()方法取出,一直判断一直取,直到把元素全部取出
  使用步骤:
  •  导入Iterator接口
  •  使用集合的iterator()方法返回Iterator对象
  •  while循环遍历
  •  使用Iterator的hasNext()方法判断是否存在下一个可访问的元素
  •  使用Iterator的Next()方法返回要访问的下一个元素

  

  遍历Map:

 一、通过键找值:

   keySet()返回映射中包含的值

使用迭代器:

 1.通过keySet获取对象,存储到某个集合

 2.遍历集合:

  • 导入Iterator接口
  • 使用集合的iterator()方法返回Iterator对象
  • while循环遍历
  • 调用Iterator对象的hasNext()方法判断
  • 调用Iterator对象的next()方法访问下一元素

 3.next()方法访问的下一元素就是key

 4.通过Map集合中的方法get(key)获取value

 5.打印键和值

使用增强for循环:

 //获取key

 for(存储的数据类型 变量名:集合){

    //获取value

    通过Map集合中的方法get(key)获取value

  }

增强for循环和keySet()方法综合使用:

 //获取key

 for(存储数据的类型 变量名:集合名.keySet()){

    //获取value

    通过Map集合中的方法get(key)获取value

 }

 二、找到对象,再找键和值

  1.使用entrySet()把对象取出,存到某一集合

  2.遍历集合,获取每个对象(迭代器):使用迭代器获取对象,使用对象中的getKey()方法和getValue()方法获取键和值

(注:获取的每个对象都包含两个值,即key、value,但它的类型是Map.Entry,所以可以遍历)

Collections类:(集合工具类)

  Collections.addAll(集合名,元素,元素,...,元素);  //添加所有

  Collections.shuffer(集合名);  //打乱顺序

  Collections.sort(集合名);  //默认排序

  Collections.sort(集合名,规则);  //自定义排序

(sort()方法分为默认排序(升序)和自定义排序)

    个人见解总结,有什么不正确或不准确哒,欢迎指正喔☺

  

    

  

  
 

  

  

  

---恢复内容结束---

原文地址:https://www.cnblogs.com/KiligYou/p/10885559.html