新手笔记:java集合汇总

本文深入探讨Java集合框架的结构及其实现,包括Collection接口的主要功能、Iterator接口的使用方法,以及ArrayList、HashSet、LinkedList和HashMap等核心类的特点与区别。

参考资料:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html

                    http://blog.csdn.net/touchSea/article/details/750923

先上图,java集合的结构




集合主要实现的接口collection

接口:Collection

所有集合类的根类型,主要的一个接口方法:boolean add(Ojbect c)

add

public boolean add(E e)
确保此 collection 包含指定的元素(可选操作)。如果此 collection 由于调用而发生更改,则返回 true。(如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。)

支持此操作的 collection 可以限制哪些元素能添加到此 collection 中来。需要特别指出的是,一些 collection 拒绝添加 null 元素,其他一些 collection 将对可以添加的元素类型强加限制。Collection 类应该在其文档中清楚地指定能添加哪些元素方面的所有限制。

如果 collection 由于某些原因(已经包含该元素的原因除外)拒绝添加特定的元素,那么它必须 抛出一个异常(而不是返回 false)。这确保了在此调用返回后,collection 总是包含指定的元素。

此实现总是抛出一个 UnsupportedOperationException

指定者:
接口 Collection<E> 中的 add
参数:
e - 确定此 collection 中是否存在的元素。
返回:
如果此 collection 由于调用而发生更改,则返回 true
抛出:
UnsupportedOperationException - 如果此 collection 不支持 add 操作
ClassCastException - 如果指定元素的类不允许它添加到此 collection 中
NullPointerException - 如果指定的元素为 null,并且此 collection 不允许 null 元素
IllegalArgumentException - 如果元素的某属性不允许它添加到此 collection 中
IllegalStateException - 如果由于插入限制,元素不能在此时间添加

其总需要注意的是:虽返回的是boolean,但不是表示添加成功与否,因为Collection规定:一个集合拒绝添加这个元素,无论什么原因,都必须抛出异常,这个返回值表示的意义是add()执行后,集合的内容是否改了(就是元素有无数量、位置等变化)。类似的addAll,remove,removeAll,remainAll也是一样的。

collection的实现方法中有一个十分重要的方法是Iterator

iterator

public abstract Iterator<E> iterator()
返回在此 collection 中的元素上进行迭代的迭代器。

指定者:
接口 Iterable<E> 中的 iterator
指定者:
接口 Collection<E> 中的 iterator
返回:
在此 collection 中的元素上进行迭代的迭代器。

具体的方式为: for(Iterator it = c.iterator(); it.hasNext();) {...}

除此之外,java还提供了一个接口方法

java.util
接口 Iterator<E>

所有已知子接口:
ListIterator<E>, XMLEventReader
所有已知实现类:
BeanContextSupport.BCSIterator, EventReaderDelegate, Scanner
public interface Iterator<E>
 

对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:

  • 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
  • 方法名称得到了改进。

此接口是 Java Collections Framework 的成员。 

package listTest;

import java.util.ArrayList;
import java.util.Iterator;

public class ListTest
{

  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    ArrayList<String> arrList = new ArrayList<String>( );
    arrList.add( "1" );
    arrList.add( "2" );
    arrList.add( "3" );
    Iterator<String> it = arrList.iterator( );
    for ( int i = 0 ; i < arrList.size( ) ; i ++ )
    {
      String str = arrList.get( i );
      System.out.println( "根据list集合为:" + str );
    }
    for ( int i = 0 ; it.hasNext( ) ; i ++ )
    {
      String str = it.next( );
      System.out.println( "根据itertar集合为:" + str );
    }
  }

}
显示的结果为:

根据list集合为:1
根据list集合为:2
根据list集合为:3
根据itertar集合为:1
根据itertar集合为:2
根据itertar集合为:3
对于it.hasNext( ) 来说,他是判断是否有下一个元素,与i无关

1.HasSet

是Set接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。

package listTest;

import java.util.HashSet;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    HashSet<String> hs = new HashSet<String>( );
    hs.add( "1" );
    hs.add( "1" );
    hs.add( "1" );
    hs.add( "1" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "各个元素为:" + it.next( ) );
    }
  }
}
结果为:

各个元素为:1
package listTest;

import java.util.HashSet;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    HashSet<String> hs = new HashSet<String>( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "各个元素为:" + it.next( ) );
    }
  }
}

结果为:

各个元素为:2
各个元素为:1

经测试为无序,即 元素插入的顺序与输出的顺序不一致,不含重复元素。

2.ArrayList

它和HashSet相反,允许存放重复元素。如果对ArrayList进行访问,迭代器将从索引0开始,每迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的所有元素,但却无法预知元素被访问的次序。大部分情况下,可以把ArrayList看作一个数组对待。寻址容易,插入和删除困难。

package listTest;

import java.util.ArrayList;
import java.util.Iterator;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    ArrayList<String> hs = new ArrayList<String>( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "各个元素为:" + it.next( ) );
    }
  }
}
显示结果为:

各个元素为:1
各个元素为:2
各个元素为:1
各个元素为:2
3.LinkList
LinkedList是一种可以在任何位置进行高效地插入和删除操作的有序序列。:寻址困难,插入和删除容易。

package listTest;

import java.util.Iterator;
import java.util.LinkedList;

public class ListTest
{
  /**
   * @param args
   */
  public static void main ( String[ ] args )
  {
    LinkedList<String> hs = new LinkedList<String>( );
    hs.add( "1" );
    hs.add( "2" );
    hs.add( "1" );
    hs.add( "2" );
    Iterator it = hs.iterator( );
    while(it.hasNext( ))
    {
      System.out.println( "各个元素为:" + it.next( ) );
    }
  }
}

结果为:

各个元素为:1
各个元素为:2
各个元素为:1
各个元素为:2
4.HashMap

HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。

基本算法

//存储时:
int hash = key.hashCode();// 这个hashCode方法这里不详述,只要理解每个key的hash是一个固定的int值
int index = hash % Entry[].length;
Entry[index] = value;

//取值时:
int hash = key.hashCode();
int index = hash % Entry[].length;
return Entry[index];
比较

    是否有序 是否允许元素重复
Collection
List
Set AbstractSet
  HashSet
  TreeSet 是(用二叉排序树)
Map AbstractMap 使用key-value来映射和存储数据,key必须唯一,value可以重复
  HashMap
  TreeMap 是(用二叉排序树)



内容概要:本文档是一份针对2025-2026年Java后端大厂面试的高频考点全面梳理,涵盖Java基础、集合框架、并发编程、JVM、Spring全家桶、MySQL、Redis、消息队列、分布式与微服务等核心技术模块。内容不仅包括经典概念辨析(如String与StringBuilder区别、HashMap底层结构),还深入源码机制与设计原理(如Spring三级缓存解决循环依赖、AOP动态代理实现),并结合实际场景探讨问题排查与技术选型(如GC调优、缓存穿透解决方案)。特别强调从“背八股”向源码理解、线上排障和设计权衡的能力转变,体现当前面试趋势的深度化与实战化。; 适合人群:具备1-3年工作经验,准备冲击中高级Java岗位的研发人员,尤其适合希望系统提升面试竞争力、深入理解主流技术底层原理的开发者。; 使用场景及目标:①应对大厂Java后端技术面试,掌握高频考点与最新趋势;②深入理解核心技术的设计动机与实现细节,如ConcurrentHashMap的线程安全机制、分布式ID生成方案对比;③提升实际问题分析与解决能力,如Full GC排查、事务失效定位等。; 阅读建议:此资源以面试为导向,兼具广度与深度,建议结合自身项目经验进行对照学习,注重理解“为什么”而非仅仅记忆结论,对关键知识点应动手验证(如ThreadLocal内存泄漏实验),并在模拟面试中强化表达逻辑。
代码下载链接: https://pan.quark.cn/s/8df2b016201b 555 芯片的引脚布局、功能特性、引脚示意图以及引脚说明是关键信息。555 芯片作为一种集成电路,具有多样化的功能特性,在定时器、定时延时控制、调光、调温、调压、调速等多种控制及计量检测领域有着广泛的应用。接下来将展示 555 芯片的引脚示意图和引脚说明: 1. 555 芯片引脚示意图:555 芯片包含 8 个引脚,具体如下: * 1 脚:地线端 * 2 脚:触发输入端 * 3 脚:输出端 * 4 脚:复位端 * 5 脚:控制端 * 6 脚:阈值端 * 7 脚:放电端 * 8 脚:电源端 2. 555 芯片引脚说明: * 1 脚:地线端,用于连接电路的负极部分。 * 2 脚:触发输入端,用于接收外部信号的输入,进而控制输出端的状态。 * 3 脚:输出端,输出高电平或低电平信号,其状态受触发器控制。 * 4 脚:复位端,当输入低电平时,输出端会输出低电平信号。 * 5 脚:控制端,用于调节输出端的状态,能够改变上下触发电平的数值。 * 6 脚:阈值端,作为上比较器的输入端,当输入高电平时,输出端会输出低电平信号。 * 7 脚:放电端,是内部放电管的输出端,其输出电平状态受触发器控制。 * 8 脚:电源端,用于连接电源的正极部分。 3. 555 芯片工作原理:555 芯片的工作原理是通过上比较器和下比较器来控制输出端的状态。上比较器的输入端位于 6 脚,而下比较器的输入端位于 2 脚。根据输入端的电平状态,输出端会输出高电平或低电平信号。 4. 555 芯片应用领域:555 芯片在各种电子产品中有着广泛的应用,例如在定时器、定时延时控制、调光、调温、调压、调速等领域。它还可以用于...
内容概要:本文提出了一种基于遗传算法的微电网调度优化方案,针对包含风能、太阳能、蓄电池和微型燃气轮机等多种分布式能源的微电网系统,构建了综合考虑经济性与稳定性的多目标优化调度模型。通过Matlab编程实现遗传算法求解,对微电网内部各单元的出力进行合理分配与协调控制,以实现运行成本最小化、可再生能源利用率最大化以及系统功率平衡和稳定性提升。文中详细阐述了系统建模过程、遗传算法的编码方式、适应度函数设计、约束条件处理机制及仿真结果分析,充分验证了该方法在降低综合运行成本、提高能源利用效率和增强系统调度灵活性方面的有效性与实用性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源、微电网优化调度相关研究的研究生及科研人员。; 使用场景及目标:①学习并掌握遗传算法在微电网多能源协调调度中的建模与应用方法;②复现、改进或拓展微电网经济调度模型;③为实际微电网能量管理系统的设计提供算法支持与仿真验证依据。; 阅读建议:建议读者结合提供的Matlab代码,深入理解遗传算法的种群初始化、交叉变异操作、适应度评估及收敛判断等关键环节,并可通过调整能源配置参数、负荷需求或引入新的约束条件(如碳排放、设备寿命)进行拓展研究,以深化对智能优化算法在综合能源系统中应用的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值