最近写程序需要用到一种结构,像HashMap的,但是却是一对一的这种结构。网上查询未果,自己用两个ArrayList进行封装。现在写出来以作抛砖引玉,希望得到大家的相关意见及建议。
/*
* @(#)DoubleKeyMap.java Project:RTKSETTINGS
* Date:2013-1-9
*
* Copyright (c) 2013 Geek_Soledad.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.realtek.msdx.rtksettings.util;
import java.util.ArrayList;
/**
* 一对一的双键类。
*
* @author Geek_Soledad (msdx.android@tom.com)
*/
public class DoubleKeyMap<K1, K2> {
private ArrayList<K1> key1s;
private ArrayList<K2> key2s;
public DoubleKeyMap() {
key1s = new ArrayList<K1>();
key2s = new ArrayList<K2>();
}
/**
* 加入一一对应的双键。
*
* @param k1
* 键1
* @param k2
* 键2
*/
public DoubleKeyMap<K1, K2> add(K1 k1, K2 k2) {
if (k1 == null || k2 == null) {
throw new IllegalArgumentException(
"both the parameters could not be null.");
}
if (key1s.contains(k1)) {
throw new IllegalArgumentException("the key1 has been put");
}
if (key2s.contains(k2)) {
throw new IllegalArgumentException("the key2 has been put");
}
key1s.add(k1);
key2s.add(k2);
return this;
}
/**
* 由键2取得键1
*
* @param k2
* 键2
* @return 返回对应的键1
*/
public K1 getKey1(K2 k2) {
return key1s.get(key2s.indexOf(k2));
}
/**
* 由键1 取得键2
*
* @param k1
* 键1
* @return 返回对应的键2
*/
public K2 getKey2(K1 k1) {
return key2s.get(key1s.indexOf(k1));
}
}
分享到:
相关推荐
本文将探讨如何在前端上传多个文件并同时携带多个参数,以及如何在Java后端优雅地接收这些数据,避免繁琐的一一对应参数处理。 前端实现: 在前端上传多文件并携带其他参数时,可以利用HTML5的`FormData`对象。这个...
由于我们只插入了一条记录,所以`ResultSet`通常只有一个行,可以通过`rs.getInt(1)`获取第一列(也是唯一一列)的主键值。 注意,这个过程只适用于那些在插入时能立即返回自增主键的数据库系统,比如MySQL。在某些...
这意味着你可以将类结构与数据库表结构一一对应,通过简单的对象操作就能完成数据的增删改查。这种模式极大地提高了开发效率,减少了代码量,并降低了出错的可能性。 ### ORM:对象关系映射 Bun的ORM功能允许开发者...
**浅拷贝**指的是创建一个新对象,新对象的属性与原对象的属性一一对应,但这些属性仍然是指向原对象的引用。这意味着,如果属性是基本数据类型,那么新旧对象分别持有相同的数据副本;如果属性是对象引用,则新旧...
它的核心方法通常是`toBean`或`convertToBean`,接受`Map`对象和目标类的Class类型作为参数,返回一个新创建的实例,其属性值与`Map`中的键值对一一对应。例如,如果`Map`中的键"username"对应于`User`类的`username...
zip即将多个可迭代对象组合为一个可迭代的对象,每次组合时...可以看到我们由 zip 模拟了一个类似字典的一一对应的元组迭代对象,并将其转化为 list 类型查看,当然我们可以利用获取迭代对象生成真正的键值字典: keys
JSON对象的结构与Java Bean的字段一一对应。需要注意的是,日期类型在转换时默认会显示为null,因为json-lib默认不处理Date对象,如果需要正确序列化日期,可能需要额外的配置或自定义转换器。 4. **自定义转换** ...
在C#编程中,反射是一个强大的工具,它允许程序在...这种方法不仅适用于简单的数据类型,也适用于复杂的对象结构,只要这些对象的属性与数据库列一一对应。通过熟练掌握反射,开发者可以编写更加灵活和可扩展的代码。
在处理两个列表,且它们的元素一一对应的情况时,可以使用`s:iterator`配合`status.index`来同时遍历这两个列表。例如,有两个列表`attrN`和`attrV`,可以通过`s:iterator value="%{attrN }"`,然后使用`#status....
* IP地址和物理地址不是一一对应的关系 五、虚拟主机 * 虚拟主机技术可以将一个主机分割成多个逻辑上的虚拟主机 * 使用虚拟主机技术创建的多个Web网站可以具有不同的IP地址 六、HTML * HTML标记用于给文档命名的...
当有两个列表,它们的元素一一对应时,可以使用 `s:iterator` 进行联合遍历: ```jsp index is : attrName is : <s:property value='id'/> or attrName is : [#status.index]}'/> ``` 这段代码将遍历 `...
* 存储对象需要与键值一一对应 * 键不能重复 * 通过键可以找到对应的值 * 可以存储不同的数据类型,如string、int、类等 泛型Dictionary的操作方法 泛型Dictionary提供了多种操作方法,包括添加元素、获取元素、...
Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。...而`c, d, e, f = "good"`是正确的,因为字符串"good"可以视为四个字符的序列,与左边的四个变量一一对应。所以,答案是D. 1错2对。
第二种是通过标签来详细定义字段名和对象属性名之间的一一对应关系。 关于Dao接口,也就是Mapper接口,它们没有实现类。接口的全限名就是映射文件中namespace的值,接口方法名对应于映射文件中MappedStatement的id...
每个Mapper XML文件通常对应一个Java接口,接口中的方法与XML文件中的SQL语句一一对应。XML文件中的主要元素有: 1. **select**:用于定义查询语句,可以设置resultType或resultMap来指定返回的结果对象。 2. **...
值得注意的是,Channel与OSS的Bucket一一对应,用户必须创建与OSS Bucket同名的Channel。 Style是IMG的一个特色功能,它允许用户将一系列处理操作和参数保存为一个别名,即样式。这样,只需通过一个简短的URL,就能...
字符串同构是指两个字符串之间存在一一对应的关系,即字符串s中的每个字符都可以被替换为字符串t中的对应字符,并且保持字符的顺序不变。如果两个字符串长度不同,或者s中的某个字符无法映射到t中的唯一字符,则这两...
转换为Map时,我们可以利用Castor的Mapping API,将Bean中的属性值一一映射到Map的键值对中。Map的键通常是Bean的属性名,值则是对应的属性值。 **3. Castor的Mapping配置** 在使用Castor进行转换前,需要配置...
Map接口代表键值对的集合,key和value之间有一一对应的关系,key具有唯一性,value可以重复。Map接口没有实现Collection接口,因为它不包含列表的概念。HashMap和TreeMap是Map的常见实现。HashMap同样基于哈希表,...
通常,我们可以创建一个函数,该函数接受URL字符串作为输入,然后返回一个对象,该对象的属性与URL参数一一对应。以下是一个简单的示例: ```javascript function getURLParams(url) { var params = {}; var ...