Java提升学习(七):Java集合类、迭代器

Java提升学习(七):Java集合类、迭代器

一、Java集合类

(一)集合的概念

Java提供了一种类,这种类相当于容器,可存储一系列对象,统称为集合。
集合与数组相近,但区分于数组

  • 数组的长度是固定的。集合的长度是可变的。
  • 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不 一致。在开发中一般当对象多的时候,使用集合进行存储。

(二)Collection接口

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.Listjava.util.Set 。其中, List 的特点是元素有序、元素可重复。 Set 的特点是元素无序,而且不可重复。 List 接口的主要实现类有 java.util.ArrayListjava.util.LinkedListSet 接口 的主要实现类有 java.util.HashSetjava.util.TreeSet
在这里插入图片描述
可以说Collection接口是最基本的集合类接口,在定义Collection中,定义了单列集合(List和Set)通用的一些方法。

方法 描述
public boolean add(E e) 把给定的对象添加到当前集合中
public void clear() 清空集合中所有的元素
public boolean remove(E e) 把给定的对象在当前集合中删除
public boolean contains(E e) 判断当前集合中是否包含给定的对象
public boolean isEmpty() 判断当前集合是否为空
public int size() 返回集合中元素的个数
public Object[] toArray() 把集合中的元素,存储到数组中

(三)List集合

java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对 象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过 索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

  • 元素存取有序的集合,怎么入怎么出
  • 带有索引的集合,通过索引就可以访问元素
  • 元素可重复

List中的常用方法:

方法 描述
public void add(int index, E element) 将指定的元素,添加到该集合中的指定位置上
public E get(int index) :返回集合中指定位置的元素
public E remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
public E set(int index, E element) 用指定元素替换集合中指定位置的元素,返回值的更新前的元素

List的子类:ArrayList集合

java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用多的功能为 查询数据、遍历数据,所以 ArrayList 是常用的集合。

List的子类:LinkedList集合

java.util.LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。
在这里插入图片描述

方法 描述
public void addFirst(E e) 将指定元素插入此列表的开头
public void addLast(E e) 将指定元素添加到此列表的结尾
public E getFirst() 返回此列表的第一个元素
public E getLast() 返回此列表的后一个元素
public E removeFirst() 移除并返回此列表的第一个元素
public E removeLast() 移除并返回此列表的后一个元素
public E pop() 从此列表所表示的堆栈处弹出一个元素
public void push(E e) 将元素推入此列表所表示的堆栈
public boolean isEmpty() 如果列表不包含元素,则返回true

(四)Set接口

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方 法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。与 List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。

  1. HashSet集合介绍
    java.util.HashSetSet 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
    HashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性 的方式依赖于: hashCodeequals 方法。
    在这里插入图片描述
    (五)Collections

常用功能

方法 描述
public static <T> boolean addAll(Collection<T> c, T... elements) 往集合中添加一些元素
public static void shuffle(List<?> list) 打乱集合顺序
public static <T> void sort(List<T> list) 将集合中元素按照默认规则排序
public static <T> void sort(List<T> list,Comparator<? super T> ) 将集合中元素按照指定规则排序
  1. Comparator比较器
public static <T> void sort(List<T> list,Comparator<? super T> ) 

可以方便的设定比较规则并实现排序等功能。

(三)Map集合
学习过python的小伙伴们都知道,python里面有个叫做 字典 的傻孩子,它被用于存储键值对儿。
而Java里面的map集合就是实现这样的功能的。
在这里插入图片描述
上图明确的告诉大家,键值对的一些特点与性质。

  • 相比collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
  • map中,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

map接口中的常用方法

方法 描述
put(K key , V value) 把指定的键与指定的值添加到Map集合中。
putAll(Map<? extends K , ? extends V> m) 将指定的Map集合全部添加到该集合
clear() 将集合内所有的键值对清除
containsKey(Object key ) 返回类型为布尔型,判断该Key中是否包含指定的对象
containsValue(Object value) 返回类型为布尔型,判断该集合中的Value是否百翰指定对象
isEmpty() 判断是否为空
remove(Object key) 将指定key-value映射从该集合中删除
size() 返回该集合包含的key-value映射的个数
entrySet() 返回该集合包含的所有键值对的Set集合
keySet() 返回集合中的所有的key的Set集合
get(Object key) 返回指定的key映射的值,若不存在该key则返回null
hashCode() 返回该值的哈希值

map的用法:

public class MapDemo {
     public static void main(String[] args) {
              //创建 map对象         
              HashMap<String, String>  map = new HashMap<String, String>();           //添加元素到集合         
              map.put("黄晓明", "杨颖");         
              map.put("文章", "马伊琍");         
              map.put("邓超", "孙俪");         
              System.out.println(map);           
              //String remove(String key)         
              System.out.println(map.remove("邓超"));         
              System.out.println(map);           
              // 想要查看 黄晓明的媳妇 是谁         
              System.out.println(map.get("黄晓明"));         
              System.out.println(map.get("邓超"));         
      }
 }

map遍历的方法:

public class MapDemo01 {
     public static void main(String[] args) {
              //创建Map集合对象          
              HashMap<String, String> map = new HashMap<String,String>();         
              //添加元素到集合          
              map.put("胡歌", "霍建华");         
              map.put("郭德纲", "于谦");         
              map.put("薛之谦", "大张伟");           
              //获取所有的键  获取键集
              Set<String> keys = map.keySet();         
              // 遍历键集 得到 每一个键         
              for (String key : keys) {            
              //key  就是键                
              //获取对应值             
              	String value = map.get(key);             
              	System.out.println(key+"的CP是:"+value);         
              }
    } 
}

在这里插入图片描述
Entry键值对对象

我们已经知道, Map 中存放的是两种对象,一种称为key(键),一种称为value(值),它们在 Map 中是一一对应关 系,这一对对象又称做 Map 中的一个 Entry(项) 。 Entry 将键值对的对应关系封装成了对象。即键值对对象,这 样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。

public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)

使用

public class MapDemo02 {
     public static void main(String[] args) {         
     // 创建Map集合对象          
     HashMap<String, String> map = new HashMap<String,String>();         
     // 添加元素到集合          
     map.put("胡歌", "霍建华");         
     map.put("郭德纲", "于谦");         
     map.put("薛之谦", "大张伟");           
     // 获取 所有的 entry对象  entrySet         
     Set<Entry<String,String>> entrySet = map.entrySet();           
     // 遍历得到每一个entry对象         
     for (Entry<String, String> entry : entrySet) {
                  // 解析                
          String key = entry.getKey();             
          String value = entry.getValue();               
          System.out.println(key+"的CP是:"+value);         
      }     
	} 
}

在这里插入图片描述

二、迭代器

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口 java.util.Iterator 。 Iterator 接口也是Java集合中的一员,但它与 Collection 、 Map 接口有所不同, Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元 素,因此 Iterator 对象也被称为迭代器。

想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作。

  • public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素
  • public E next() :返回迭代的下一个元素
  • public boolean hasNext() :如果仍有元素可以迭代,则返回 true

使用:

public class IteratorDemo {
    public static void main(String[] args) {            
    // 使用多态方式 创建对象         
    Collection<String> coll = new ArrayList<String>();           
    // 添加元素到集合         
    coll.add("串串星人");         
    coll.add("吐槽星人");         
    coll.add("汪星人");         
    //遍历         
    //使用迭代器 遍历   每个集合对象都有自己的迭代器         
    Iterator<String> it = coll.iterator();         
    //  泛型指的是 迭代出 元素的数据类型         
    while(it.hasNext()){ //判断是否有迭代元素
                 String s = it.next();//获取迭代出的元素             
                 System.out.println(s);
    }
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43818177/article/details/105890522