集合的一些总结

1.概念:

每一组对象的全体形成一个集合(或简称集)。集合里的每一个对象叫做这个集合的元素。

集合存放的都是对象的引用,而非对象的本身,而基本数据类型是没有对象的,所以一般基本数据类型不能用集合存放,但是包装类将基本数据类型自动包装为引用数据类型

2.集合体系大概:

  • Collection接口
  • Map接口
  • Iterator接口
  • Enumeration接口

 3.Collertion接口:

Collection接口又分为两个子接口

分别是ListSet

List接口表示的是一个有序的集合,允许存放重复的元素;而Set接口则表示的是一个无序的集合,不允许存放重复的元素。

Collection接口的常用方法:

add(Object o):增加元素

addAll(Collection c):

clear():

Contains(Object o):是否包含指定元素

containsAll(Collection c):是否包含集合c中的所有元素

iterator():返回Iterator对象,用于遍历集合中的元素

remove(Object o):移除元素 

removeAll(Collection c):相当于减集合

cretainAll(Collection c):相当于求与c的交集

size():返回元素个数

set(index,value):替换指定索引的值

get(index)获得指定下标下面的元素

toArray():把集合转换为一个数组

 

 

 

  • List接口:

List接口有三个实现类:ArrayList、LinkedList和Vector,它们都是有序的集合,可以存放重复的元素。

ArrayList:

是基于动态数组实现的,它的特点是查询快,增删慢;

ArrayList的默认长度为10,每次扩容为原来的1.5倍,会进行一个复制拷贝的操作,但是如果创造的时候带了长度,则不会进行扩容,它的空间浪费主要提现在list列表的结尾,有一定的容量空间,对比LinkedList的空间浪费则是,它每个元素都要额外的指针,所以每个元素都会浪费一定的空间;Vector的扩容则是两倍的扩容;

查询快是因为带了索引,增删慢是因为进行增删,后面的索引值需要跟着一起改变

LinkedList

是基于链表实现的,它的特点是查询慢,增删快;线程不安全但是效率高

Vector

是一个线程安全的实现类,与ArrayList类似,但是它的所有方法都是同步的,因此性能较差,一般不推荐使用。扩容是两倍

Iterator迭代器

迭代器是一种设计模式,是一个对象,可以遍历并选择序列中的对象,开发人员也不需要理解底层结构,迭代器通常被称为“轻量级”对象,因为创建的代价小

对集合对象使用iterator()方法,返回一个Iterator对象,然后可以调用对象的方法,

Iterator的方法 :

(1)next() 获得序列的下一个元素,如果是第一次调用则返回序列第一个元素next()方法,指针会移动到下一个元素,如果不注意的话会发生迭代异常

(2)hasNext()检查序列是否还有元素

(3)remove()将迭代器新返回的元素删除,没有使用next()方法则不能使用remove()方法,一次next()方法只能使用一次remove()方法

Set接口(无序,唯一,无索引):

Set接口也有三个实现类:HashSet、TreeSet和LinkedHashSet。

HashSet是基于哈希表实现的,它是一个无序的集合,不允许存放重复的元素;

哈希表依赖两个方法:hashcode()和equals():

(一般规则:对象equals 是true的话,hashCode需要相同,但是hashCode相同的对象不一定equals,这就是所谓的冲突现)

执行顺序:                   首先判断hashCode()值是否相同                     

 是:继续执行equals(), 看其返回值                       否:就直接添加到集合         

执行equals():是true:说明元素重复,不添加                   是false:就直接添加到集合      

最终:                   自动生成hashCode()和equals()即可

TreeSet是基于红黑树实现的(自平衡二叉树),它可以对元素进行排序,不允许存放重复的元素;

如何保证元素的唯一:根据比较的返回值是否是0来决定

如何保证元素的排序:

自然排序(元素具备比较性)   :      让元素所属的类实现Comparable(康不瑞波)接口     

比较器排序(集合具备比较性):       让集合接收一个Comparator(康怕瑞特)的实现类对象

LinkedHashSet是基于哈希表和链表实现的,它可以保证元素的插入顺序(链表),不允许存放重复的元素(哈希表)

哈希表依赖两个方法:hashcode()和equals():

(一般规则:对象equals 是true的话,hashCode需要相同,但是hashCode相同的对象不一定equals,这就是所谓的哈希冲突)

执行顺序:                   首先判断hashCode()值是否相同                     

 是:继续执行equals(), 看其返回值                       否:就直接添加到集合         

执行equals():是true:说明元素重复,不添加                   是false:就直接添加到集合      

最终:                   自动生成hashCode()和equals()即可

4.Map集合(双列集合):

A:Map集合的数据结构仅仅针对键有效,与值无关。

B:存储的是键值对形式的元素,键唯一,值可重复。

Map接口也有三个实现类:HashMap、TreeMap和LinkedHashMap。

HashMap是基于哈希表实现的,它是一个无序的集合,允许存放重复的键值对,但是不允许键重复,线程不安全,效率高;

map集合没有迭代器,map集合的迭代器本质,是将map集合转换成set集合后再使用迭代器

Set<Integer> set = map.keySet();
      Iterator<Integer>it = set.iterator();
       while (it.hasNext()) {
         Integer key = it.next();
         // 再通过key值得到value
         String value = map.get(key);
         System.out.println("k==" + key + ",v==" + value);
      }

--------------entrySet循环遍历map集合-----------------------

Set<Entry<Integer, String>> set2 = map.entrySet();
      Iterator<Entry<Integer,String>> it2 = set2.iterator();
      while (it2.hasNext()) {
         Entry<Integer,String> entry = it2.next();
         Integer key = entry.getKey();
         String value = entry.getValue();
         System.out.println("k==" + key + ",v==" + value);
      }

--------------增强for循环循环遍历map集合-----------------------

Set<Integer> set3 = map.keySet();
      for(Integer i : set3) {
         System.out.println("k==" + i + ",v==" + map.get(i));
      }

LinkedHashMap是基于哈希表和链表实现的,它可以保证键值对的插入顺序,不允许键重复,由链表保证元素有序,由哈希表保证元素唯一。

TreeMap是基于红黑树实现的,它可以对键进行排序,不允许键重复;

二叉树排序:

二叉树算法的排序规则:

1.      选择第一个元素作为根节点

2.      之后如果元素大于根节点就放在右子树,如果小于根节点就放在左子树

3.      最后按照中序(左中右)输出,就是有序的

代码实现思路:

1.      创建一个节点类Node

2.      添加节点方法

3.      输出的方法

4.      创建一个棵树

Iterator接口和Enumeration接口都是用于遍历集合元素的接口。

Iterator接口是Java 1.2引入的,它可以遍历所有实现了Collection接口的集合,支持删除操作;

Enumeration接口是Java 1.0就有的,它只能遍历实现了Enumeration接口的集合,不支持删除操作。一般来说,建议使用Iterator接口进行集合的遍历操作。

迭代器是Java集合框架中的一种通用的遍历机制,用于访问集合中的元素。Iterator接口是Java提供的一个迭代器接口,它提供了hasNext()和next()两个方法,通过调用这两个方法可以遍历集合中的元素。

Enumeration接口也是用于遍历集合中的元素的接口,但是它只提供了hasMoreElements()和nextElement()两个方法,它是Java早期集合框架中的接口,现在已经不太常用了。

在使用Iterator遍历集合时,可以使用remove()方法删除集合中的元素,而在使用Enumeration遍历集合时则没有这个功能。

常见的集合类都实现了Iterator接口,例如ArrayList、LinkedList、HashSet、TreeSet等。而Enumeration接口只被Vector和Hashtable所实现。

总的来说,Iterator接口是Java集合框架中比较常用的遍历接口,而Enumeration接口已经不太常用了。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值