- Java1052
- 编程124
- Programming106
- Kotlin99
- Spring Boot96
- Spring61
- MongoDB32
- Maven31
- Testing30
- Spring Security28
- JPA26
- Concurrency26
- Collections24
- Spring Data JPA23
- Kafka22
- Hibernate21
- String Manipulation19
- JSON19
- Database18
- JUnit15
- Jackson15
- Security15
- JDBC14
- Spring Cloud12
- XML12
- Gradle12
- Web Development12
- Cassandra12
- JVM11
- Swagger11
- 算法10
- Stream API10
- Algorithms10
- Reactive Programming10
- Tutorial9
- Mockito9
- Postman9
- 设计模式9
- Date and Time9
- Logging9
- 教程8
- Software Engineering8
- CompletableFuture8
- OAuth8
- BigDecimal8
- Exception Handling8
- 文件操作8
- Spring Framework8
- ArrayList8
- HashMap8
- 数据库8
- Apache Kafka7
- GraphQL7
- 编程技巧7
- Algorithm7
- Thymeleaf7
- Apache POI7
- Kubernetes7
- Spring WebFlux7
- String7
- Spring Data7
- AWS6
- Arrays6
- WebFlux6
- Reflection6
- IntelliJ IDEA6
- Software Development6
- Docker6
- Error Handling6
- Scanner6
- Keycloak6
- Selenium6
- REST with Spring Boot5
- Apache Camel5
- OAuth25
- Networking5
- Spring JPA5
- 字符串操作5
- IO5
- Regex5
- Log4j25
- OpenAPI5
- Lombok5
- 字符串处理5
- Web Services5
- gRPC4
- PostgreSQL4
- 数据结构4
- Gson4
- Learn Spring Security4
- UUID4
- Excel4
- Unicode4
- Microservices4
- 正则表达式4
- StringBuilder4
- CSV4
- Coroutines4
- Selenium WebDriver4
- Optional4
- DevOps4
- Spring Data Cassandra4
- Enums4
- 性能测试4
- NoSQL4
- Regular Expressions4
- Design Patterns4
- HttpClient4
- JMeter4
- 异常处理4
- Spring Cloud Gateway4
- Annotations4
- Serialization3
- 字符串3
- Quarkus3
- 日期时间3
- SSL3
- 编码3
- Spock3
- Web开发3
- Micronaut3
- Spring MVC3
- PriorityQueue3
- 文件处理3
- Streams3
- Development Tools3
- Configuration3
- Eclipse3
- Java Collections3
- Testcontainers3
- 反射3
- I/O3
- RxJava3
- 日期处理3
- Software Testing3
- MapStruct3
- H2 Database3
- 图像处理3
- Performance3
- HTTP3
- Logback3
- WebClient3
- PDF3
- NIO3
- Spring Data MongoDB3
- HTTP Client3
- Javadoc3
- HTML3
- Base642
- JUnit 52
- 内存管理2
- 性能2
- UTF-82
- Spring Kafka2
- Jersey2
- ASCII2
- Date-Time API2
- Text Processing2
- LinkedHashMap2
- 环境变量2
- REST2
- Tutorials2
- Tomcat2
- YAML2
- Stream2
- Servlet2
- Collection Framework2
- JNI2
- MockK2
- JSP2
- JavaScript2
- Web Testing2
- Gatling2
- 序列化2
- Apache JMeter2
- Elasticsearch2
- Actuator2
- Records2
- JMX2
- Resilience4j2
- Debugging2
- Feign2
- RabbitMQ2
- Data Structures2
- Unit Testing2
- Tools2
- JWT2
- Axon2
- Redis2
- Caching2
- API2
- Apache Cassandra2
- JAR文件2
- Enum2
- SSO2
- Java Concurrency2
- 数学2
- Development2
- Swagger UI2
- BigInteger2
- Astra2
- GZIP2
- Apache Commons2
- Java编程2
- MacOS1
- 数字处理1
- Netty1
- GroupId vs ConsumerId1
- REST Docs1
- Query Optimization1
- 数据库视图1
- etcd1
- SoftDelete1
- String Algorithms1
- Date-Time1
- 网络编程1
- Pagination1
- OpenJDK1
- Windows1
- OpenGrok1
- 代码搜索1
- AOP1
- Web Server1
- URL编码1
- Spring Batch1
- 日期转换1
- XMLGregorianCalendar1
- 构建工具1
- Event-Driven Architecture1
- Spring Modulith1
- Event Externalization1
- SecureRandom1
- Backend Java/Spring Team Lead1
- Remote Job1
- 多线程1
- ListIterator1
- 数据压缩1
- Environment Variables1
- Morse Code1
- 2D Geometry1
- Joda-Time1
- Reactive APIs1
- 垃圾收集器1
- Apache Calcite1
- Spring AI1
- Baeldung1
- Spring Cloud AWS1
- SQS Integration1
- HTTPS1
- 输入处理1
- 文件上传1
- SpEL1
- 日期时间计算1
- 数组1
- QueryException1
- ISO 86011
- OutputStream1
- 分区1
- CRUD1
- Timefold Solver1
- Error Prone1
- LocalDateTime1
- 异步编程1
- GUI1
- 集合框架1
- Unix Time1
- Asynchronous Programming1
- InputStream1
- Trusted Packages1
- HarperDB1
- Testing & Debugging1
- Coroutine1
- JEP 2901
- JEP 4151
- Quartz1
- 消息排序1
- Consumer Groups1
- Date1
- 内存共享1
- 排序1
- Annotation1
- RestClient1
- GlassFish1
- 游戏开发1
- Collections Framework1
- Language Models1
- JNDI1
- 国际化1
- Cucumber1
- Connection Details1
- GraalVM1
- Collection1
- 数学运算1
- MIME类型1
- 高阶函数1
- RSocket1
- String Templates1
- 版本控制1
- Apache Commons Lang1
- Validation1
- Log4j1
- Emoji1
- Java 81
- 性能监控1
- Cache1
- Query IN Clause1
- Telegram Bot1
- SQL1
- AWS SDK for Java1
- S31
- Build Optimization1
- Inner Classes1
- Subclasses1
- JSON Schema1
- Design Pattern1
- Docker Compose1
- 运维1
- Apache Pulsar1
- Jackson-jr1
- R2DBC1
- 性能比较1
- Scroll API1
- 分布式系统1
- AsyncAPI1
- Endianness1
- Zip Files1
- 403 Error1
- Messaging1
- Selenide1
- UI自动化测试1
- this 关键字1
- OpenFeign1
- Batch Processing1
- Build1
- findBy vs findOneBy1
- 图像压缩1
- Entity Classes1
- API Testing1
- flush()1
- Dependency Management1
- Introduction1
- API Key1
- FlexyPool1
- 编程实践1
- Android1
- IAM1
- Spring Boot CLI1
- 密码编码1
- Modular Monolith1
- NLP1
- Automation Testing1
- Ktor1
- OpenAI1
- Spring Cloud Azure1
- Azure Key Vault1
- Companion Object1
- LocalDate1
- Webdriver1
- AWS Secrets Manager1
- 多对多关系1
- SAML1
- AzureAD1
- Feign Client1
- Object Creation1
- Web Scraping1
- 插件1
- Project Panama1
- cURL1
- Spring Data Redis1
- Redis TTL1
- QuestDB1
- Encryption1
- Load Testing1
- AWS Lambda1
- Kafka Listener1
- ApplicationContext1
- HTTPie1
- 命令行工具1
- Maps1
- Jakarta EE1
- JVM内存类型1
- OpenTelemetry1
- Math1
- Asynchronous Operations1
- CommandLine1
- Number Conversion1
- findFirst() vs findTop()1
- RestTemplate1
- ScyllaDB1
- NonUniqueResultException1
- RESTful Microservices1
- Lambda表达式1
- 异常与错误1
- Linux1
- Springdoc-OpenAPI1
- 函数式编程1
- Rate Limiting1
- Camunda1
- Web Client1
- String Interpolation1
- Firebase Cloud Messaging1
- iText1
- Build Automation1
- DateTime API1
- 技术1
- 远程工作1
- ZooKeeper1
- Kong Ingress1
- Method Security1
- Reference Types1
- Tablesaw1
- Reactor1
- SBE1
- Spring Webflux1
- DataBufferLimitException1
- Remote Jobs1
- Part-Time Jobs1
- Streaming1
- 数据库操作1
- MySQL1
- Groovy1
- JUnit51
- NIO21
- Lists1
- Protobuf1
- Axon Framework1
- MD51
- CRaC1
- Garbage Collection1
- String Concatenation1
- Functional Programming1
- Armstrong Numbers1
- API设计1
- Git1
- INI文件解析1
- 多租户1
- REST API1
- 消息计数1
- Repository1
- 字符串格式化1
- SOAP1
- Spring Boot 31
- Spring Framework 6.01
- Spring JMS1
- Properties1
- StringBuffer1
- File Management1
- JAR1
- Windows Executables1
- 日期和时间1
- Lightrun1
- Spring Data Rest1
- RESTful Web Services1
- Messaging Systems1
- Spring Native1
- Liberica1
- Class Loader1
- Testing & Mocking1
- Java Servlets1
- Sound1
- spring1
- jpa1
- CSRF Token1
- Transactions1
- JDK1
- equals() vs ==1
- HQL1
- Build Cache1
- Object-Oriented Programming1
- Spark1
- DataFrame1
- Eureka1
- Locks1
- HTTP Basic Authentication1
- JPA Repository1
- Command Line1
- Upsert1
- Operators1
- Apache Tomcat1
- 控制结构1
- Nginx1
- 代理服务器1
- FaunaDB1
- Servlets1
- 数据源1
- Zuul1
- 数据库连接1
- 并发1
- Autowired1
- URL Rewrite1
- 编程语言1
- JavaFX1
- 事件处理1
- InstantSource1
- Multithreading1
- Constructor1
- Spring Cloud Sleuth1
- Hibernate Validator1
- Annotation Processor1
- JEP-3711
- Load Balancer1
- OpenID1
- 多行代码示例1
- OAuth 2.01
- Content Security Policy1
- 字符串转换1
- Bit Manipulation1
- Netflix Spectator1
- Kafka Streams1
- VisualVM1
- SonarQube1
- Socket1
- Abstract Classes1
- HexFormat1
- Reflection API1
- LDAP1
- Logging Queries1
- Java 171
- Byte Array1
- ModelMapper1
- 并行测试1
- Prim算法1
- Ratpack1
- Event Sourcing1
- Web Security1
- 时间格式化1
- Thread1
- ArangoDB1
- Dapr1
- Geospatial1
- Open Source1
- Guava1
- GitHub1
- Zip4j1
- LRU Cache1
- 招聘1
- Java开发1
- Utility Classes1
- Compilation1
- 3DES1
- Java Persistence API1
- Java Database Connectivity1
- REST & GraphQL1
- OkHttp1
- 日志1
- Enterprise Integration Patterns1
- POM1
- Soft Delete1
- 工具1
- JVM参数1
- Java性能优化1
- Dependencies1
- Multipart Request1
- Distributed Systems1
- Interfaces1
- Set1
- Jmix1
- JEP 4181
- Framework1
- New Features1
- 时间处理1
- 编码转换1
- Web Automation1
- Duration1
- Java Tutorials1
- HexFormat API1
- EOL Characters1
- 并行操作1
- Saga Pattern1
- 密码学1
- 数据分析1
- Commit Offsets1
- Java Libraries1
- Redpanda1
- URI1
- Jsoup1
- Authorization1
- Development Practices1
- 数据类型转换1
- Google Protocol Buffer1
- 计算机科学1
- Version Control1
- Spring AOP1
- Update-Or-Insert1
- macOS1
- Apache Commons Compress1
- Libraries1
- SSHJ1
- Email1
- 数据类型比较1
- jOOQ1
- MyBatis1
- Prometheus1
- OpenAI API1
- Java Persistence1
- 安全1
- ConverterNotFoundException1
- 依赖管理1
- Comparator1
- 注解与枚举1
列表是在Java中常用的集合类型。
众所周知,我们可以轻松地在一行代码中初始化列表。例如,当我们想要用只有一个元素初始化列表时,我们可以使用 Arrays.asList() 方法或 Collections.singletonList() 方法。
在本教程中,我们将讨论这两种方法之间的区别。然后,为了简单起见,我们将使用单元测试断言来验证某些操作是否符合预期。
Arrays.asList() 方法
首先,Arrays.asList() 方法返回的是一个固定大小的列表。
任何结构性更改都会抛出 UnsupportedOperationException,例如,向列表中添加新元素或从列表中删除元素。现在,让我们通过测试来检查:
1. 引言
HashSet 是我们可以在Java Collections 中使用的一种常见数据结构。
在本教程中,我们将深入探讨_HashSet_类的_toArray()_方法,展示如何将_HashSet_转换为数组。
2. 将_HashSet_转换为_数组_
让我们看一组示例,说明如何应用_toArray()_方法将_HashSet_转换为数组。
2.1. HashSet_转换为_字符串数组
在以下方法中,我们试图将字符串的_HashSet_转换为字符串数组:
在Java中,不可变对象确保了线程安全并防止了意外的修改,从而促进了健壮和可靠的代码。然而,有时我们希望向不可变列表添加元素。
在这个快速教程中,我们将探讨如何在Java中实现这一点。
2. 问题介绍
不可变列表不允许我们向其添加元素。但在某些情况下,我们希望将额外的元素合并到不可变列表中,同时不损害其不可变性。换句话说,我们希望有一个包含给定不可变列表所有元素和新元素的不可变列表。
接下来,让我们创建一个方法来实现这一点。为了简单起见,我们将使用单元测试断言来验证我们的解决方案是否产生了预期的结果。
迭代一个列表是Java中的常见操作,但在迭代过程中向其中添加元素需要仔细考虑,以避免异常并确保代码的正确性。
在这个教程中,我们将讨论在迭代期间向集合添加元素的几种方法。
2. 使用 ListIterator 类
一种常见的方法是使用 ListIterator,它为列表提供了双向遍历和修改能力。
2.1. 字符串场景
考虑以下示例,我们在遇到 Python 后将 JavaScript 添加到编程语言列表中:
List```<String>``` programmingLanguages = new ArrayList<>(Arrays.asList("Java", "Python", "C++"));
@Test
public void givenList_whenAddElementWithListIterator_thenModifiedList() {
ListIterator```<String>``` listIterator = programmingLanguages.listIterator();
while (listIterator.hasNext()) {
String language = listIterator.next();
if (language.equals("Python")) {
listIterator.add("JavaScript");
}
}
assertIterableEquals(Arrays.asList("Java", "Python", "JavaScript", "C++"), programmingLanguages);
}
在本教程中,我们将探讨Java中除了常见的_Collection_类之外的两种集合类型。众所周知,我们有三个核心集合类:Map、List_和_Set。它们有对应的不可修改和不可变版本。
在我们的示例中,我们涵盖了Java中的_Map_系列集合。_Collections.unmodifiableMap()和_Map.of()方法适用于_Map,而_Collections.unmodifiableList()、Collections.unmodifiableSet()、_List.of()_和_Set.of()_是_List_和_Set_集合类的相应实用方法。相同的概念也适用于_List_和_Set_集合类。
熟练使用集合API是Java开发者最关键的技能之一。本教程将重点介绍_ArrayList_及其_addAll()_方法。
尽管_addAll()_是向目标_ArrayList_添加一系列元素的最便捷方式,但它在处理空值时表现不佳。
空值和addAll()
正如前面所述,addAll()方法在处理空值时表现不佳。如果我们传递一个空引用,它将抛出_NullPointerException_:
@ParameterizedTest
@NullSource
void givenNull_whenAddAll_thenAddThrowsNPE(List`````````````<String>````````````` list) {
ArrayList`````````````<String>````````````` strings = new ArrayList<>();
assertThatExceptionOfType(NullPointerException.class)
.isThrownBy(() -> strings.addAll(list));
}
在本教程中,我们将讨论如何在Java库中选择适当的集合接口和类。我们跳过了诸如_Vector_、_Stack_和_Hashtable_等遗留集合,因为我们需要避免使用它们,而转而使用新的集合。并发集合值得单独讨论,因此我们也不在此讨论它们。
2. Java库中的集合接口
在尝试有效使用它们之前,了解Java库中集合接口和类的组织结构非常有用。_Collection_接口是所有集合接口的根。List、Set_和_Queue_接口扩展了_Collection。
在Java库中,映射(Maps)不被视为常规集合,因此_Map_接口不扩展_Collection_。这是Java库中接口关系的图表:
在本教程中,我们将学习如何在特定位置向ArrayList中插入一个对象。
2. 示例
如果我们想在ArrayList中的特定位置添加一个元素,我们可以使用通过List<E>接口实现提供的add(int index, E element)方法。这个方法允许我们在特定索引处添加一个元素。
如果索引超出范围(索引<0或索引>size()),它还可能抛出一个IndexOutOfBoundsException。这意味着如果我们的ArrayList中只有4个元素,我们不能使用它在位置4添加项目,因为我们从0开始计数。在这里,我们必须使用标准的add(E e)方法。
在这篇简短的教程中,我们将阐明如何在Java中将HashMap的值转换为ArrayList。
首先,我们将解释如何使用Java核心方法进行转换。然后,我们将演示如何使用如Guava等外部库来解决我们的核心问题。
2.1 使用ArrayList构造器
ArrayList构造器提供了将HashMap转换为ArrayList的最常见和最简单的方法。
这里的基本思想是将HashMap的值作为参数传递给ArrayList构造器:
ArrayList```````````````<String>``````````````` convertUsingConstructor(HashMap```````<Integer, String>``````` hashMap) {
if (hashMap == null) {
return null;
}
return new ArrayList```````````````<String>```````````````(hashMap.values());
}