`
貌似掉线
  • 浏览: 260529 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一一对应的键值对象

阅读更多
最近写程序需要用到一种结构,像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));
	}
}
0
4
分享到:
评论
2 楼 貌似掉线 2013-03-27  
xiaozhi6156 写道
很好〈。。。。。。。。。〉

不过后来我发现完全没必要自己写。因为在我自己的需求中,用的都是int的键值对。android中有SparseArray和SparseIntArray。对于从value取得key,虽然没有直接的可调用方法,不过有一个方法是从value中取得index,有一个是从index中取得key,就是不知道这个类的效率怎么样。
1 楼 xiaozhi6156 2013-03-26  
很好〈。。。。。。。。。〉

相关推荐

    前端上传多文件,携带多参数,java接收(省去频繁写一一对应的参数)(csdn)————程序.pdf

    本文将探讨如何在前端上传多个文件并同时携带多个参数,以及如何在Java后端优雅地接收这些数据,避免繁琐的一一对应参数处理。 前端实现: 在前端上传多文件并携带其他参数时,可以利用HTML5的`FormData`对象。这个...

    jdbc 插入记录并返回自增主键值

    由于我们只插入了一条记录,所以`ResultSet`通常只有一个行,可以通过`rs.getInt(1)`获取第一列(也是唯一一列)的主键值。 注意,这个过程只适用于那些在插入时能立即返回自增主键的数据库系统,比如MySQL。在某些...

    bun:Bun是易于使用的C ++对象数据库,对象关系映射器(ORM)和键值库

    这意味着你可以将类结构与数据库表结构一一对应,通过简单的对象操作就能完成数据的增删改查。这种模式极大地提高了开发效率,减少了代码量,并降低了出错的可能性。 ### ORM:对象关系映射 Bun的ORM功能允许开发者...

    详解js中的对象的深浅拷贝

    **浅拷贝**指的是创建一个新对象,新对象的属性与原对象的属性一一对应,但这些属性仍然是指向原对象的引用。这意味着,如果属性是基本数据类型,那么新旧对象分别持有相同的数据副本;如果属性是对象引用,则新旧...

    MapUtils工具类,轻松转换map数据与实体类

    它的核心方法通常是`toBean`或`convertToBean`,接受`Map`对象和目标类的Class类型作为参数,返回一个新创建的实例,其属性值与`Map`中的键值对一一对应。例如,如果`Map`中的键"username"对应于`User`类的`username...

    详解Python3 对象组合zip()和回退方式*zip

    zip即将多个可迭代对象组合为一个可迭代的对象,每次组合时...可以看到我们由 zip 模拟了一个类似字典的一一对应的元组迭代对象,并将其转化为 list 类型查看,当然我们可以利用获取迭代对象生成真正的键值字典: keys

    java利用json-lib操作json

    JSON对象的结构与Java Bean的字段一一对应。需要注意的是,日期类型在转换时默认会显示为null,因为json-lib默认不处理Date对象,如果需要正确序列化日期,可能需要额外的配置或自定义转换器。 4. **自定义转换** ...

    C#2.0中通过反射功能给类赋值

    在C#编程中,反射是一个强大的工具,它允许程序在...这种方法不仅适用于简单的数据类型,也适用于复杂的对象结构,只要这些对象的属性与数据库列一一对应。通过熟练掌握反射,开发者可以编写更加灵活和可扩展的代码。

    迭代器的使用

    在处理两个列表,且它们的元素一一对应的情况时,可以使用`s:iterator`配合`status.index`来同时遍历这两个列表。例如,有两个列表`attrN`和`attrV`,可以通过`s:iterator value="%{attrN }"`,然后使用`#status....

    2023年全国4月自考00898互联网软件应用与开发试题及答案.docx

    * IP地址和物理地址不是一一对应的关系 五、虚拟主机 * 虚拟主机技术可以将一个主机分割成多个逻辑上的虚拟主机 * 使用虚拟主机技术创建的多个Web网站可以具有不同的IP地址 六、HTML * HTML标记用于给文档命名的...

    s:iterator 用法 (2).docx

    当有两个列表,它们的元素一一对应时,可以使用 `s:iterator` 进行联合遍历: ```jsp index is : attrName is : &lt;s:property value='id'/&gt; or attrName is : [#status.index]}'/&gt; ``` 这段代码将遍历 `...

    Dictionary泛型的使用,带有例子

    * 存储对象需要与键值一一对应 * 键不能重复 * 通过键可以找到对应的值 * 可以存储不同的数据类型,如string、int、类等 泛型Dictionary的操作方法 泛型Dictionary提供了多种操作方法,包括添加元素、获取元素、...

    python运算符-Python变量和运算符.pptx

    Python是一种高级编程语言,以其简洁明了的语法和强大的功能而闻名。...而`c, d, e, f = "good"`是正确的,因为字符串"good"可以视为四个字符的序列,与左边的四个变量一一对应。所以,答案是D. 1错2对。

    myBatis面试问题

    第二种是通过标签来详细定义字段名和对象属性名之间的一一对应关系。 关于Dao接口,也就是Mapper接口,它们没有实现类。接口的全限名就是映射文件中namespace的值,接口方法名对应于映射文件中MappedStatement的id...

    Mybatis主配置文件、附配置文件、实体类、sql生成工具

    每个Mapper XML文件通常对应一个Java接口,接口中的方法与XML文件中的SQL语句一一对应。XML文件中的主要元素有: 1. **select**:用于定义查询语句,可以设置resultType或resultMap来指定返回的结果对象。 2. **...

    阿里云-对象存储服务OSS图片服务手册.pdf

    值得注意的是,Channel与OSS的Bucket一一对应,用户必须创建与OSS Bucket同名的Channel。 Style是IMG的一个特色功能,它允许用户将一系列处理操作和参数保存为一个别名,即样式。这样,只需通过一个简短的URL,就能...

    Python面试精选45题.pdf

    字符串同构是指两个字符串之间存在一一对应的关系,即字符串s中的每个字符都可以被替换为字符串t中的对应字符,并且保持字符的顺序不变。如果两个字符串长度不同,或者s中的某个字符无法映射到t中的唯一字符,则这两...

    castor转map

    转换为Map时,我们可以利用Castor的Mapping API,将Bean中的属性值一一映射到Map的键值对中。Map的键通常是Bean的属性名,值则是对应的属性值。 **3. Castor的Mapping配置** 在使用Castor进行转换前,需要配置...

    Java集合.pptx

    Map接口代表键值对的集合,key和value之间有一一对应的关系,key具有唯一性,value可以重复。Map接口没有实现Collection接口,因为它不包含列表的概念。HashMap和TreeMap是Map的常见实现。HashMap同样基于哈希表,...

    自己写的JavaScript获取URL参数方法

    通常,我们可以创建一个函数,该函数接受URL字符串作为输入,然后返回一个对象,该对象的属性与URL参数一一对应。以下是一个简单的示例: ```javascript function getURLParams(url) { var params = {}; var ...

Global site tag (gtag.js) - Google Analytics