java中什么集合键可以重复 java判断集合是否重复用什么符号关键字
大家好,java中什么集合键可以重复相信很多的网友都不是很明白,包括java判断集合是否重复用什么符号关键字也是一样,不过没有关系,接下来就来为大家分享关于java中什么集合键可以重复和java判断集合是否重复用什么符号关键字的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
c#中如何实现可以重复的键值
软糖二话不说直接上代码
按Key排序的 MutiSortedList<TKey, TValue>///<summary>
///按Key排序再按Value排序的SortedList,Key和Value都可以重复,但禁止键值对完全相同。
///</summary>
public class MutiSortedList<TKey, TValue>: SortedList<TKey, TValue> where TKey: IComparable
{
///<summary>
///相等的键也返回不等
///</summary>
private class MyComparer<TCKey>: IComparer<TCKey> where TCKey: IComparable
{
public int Compare(TCKey x, TCKey y)
{
int i= x.CompareTo(y);
//(-1) x在y之前//(1) x在y之后
if(i== 0){ return(-1);} else{ return i;}
}
}
public MutiSortedList(): base(new MyComparer<TKey>()){}
public new void Add(TKey key, TValue value)
{
foreach(KeyValuePair<TKey, TValue> item in this)
{//检查是否具备这个key,并且检查value是否重复
if(item.Key.Equals(key)&& item.Value.Equals(value)){ return;}
}
base.Add(key, value);
}
public new void Remove(TKey key)
{
for(int i= 0; i< this.Count; i++)
{
if(Keys[i].Equals(key)){ base.RemoveAt(i);}
}
}
public void Remove(TValue value)
{
for(int i= 0; i< this.Count; i++)
{
if(Values[i].Equals(value)){ base.RemoveAt(i);}
}
}
public void Remove(TKey key, TValue value)
{
for(int i= 0; i< this.Count; i++)
{
if(Keys[i].Equals(key)& Values[i].Equals(value)){ base.RemoveAt(i);}
}
}
public new TValue this[TKey key]
{
get{ return base[key];}
}
///<summary>
///返回键对应的值列表
///</summary>
///<param name="key"></param>
///<param name="升序"></param>
///<returns>返回IList(Of值)</returns>
public IList<TValue> this[TKey key, bool升序]
{
get{
var结果= new List<TValue>();
for(int i= 0; i< Count; i++)
{
if(Keys[i].Equals(key))
{结果.Add(Values[i]);}
}
return结果;
}
}
}
不排序的,实际内部装的是Tuple,不使用Key和Value而用Item1和Item2///<summary>
///按默认顺序排序的Dictionary,Key和Value都可以重复,但禁止键值对完全相同。
///<para>继承于<see cref="List{Tuple}"/><see cref="Tuple{TKey, TValue}"/></para>
///</summary>
public class TupleList<TKey, TValue>: List<Tuple<TKey, TValue>>{
public void Add(TKey key, TValue value){
foreach(var item in this){//检查是否具备这个key,并且检查value是否重复
if(item.Item1.Equals(key)&& item.Item2.Equals(value)){ return;}
}
base.Add(new Tuple<TKey, TValue>(key, value));
}
public void Remove(TKey key){
foreach(var item in this){
if(item.Item1.Equals(key)){ Remove(item);}
}
}
///<summary>
///返回键对应的多个值组成的列表<see cref="IList{TValue}"/>
///</summary>
///<param name="key"></param>
///<param name="升序"></param>
///<returns>返回IList(Of值)</returns>
public IList<TValue> this[TKey key, bool升序= false]{
get{
var结果= new List<TValue>();
foreach(var item in this){//检查是否具备这个key,并且检查value是否重复
if(item.Item1.Equals(key)){结果.Add(item.Item2);}
}
return结果;
}
}
}
java 用什么集合类型可以同时保存两个对象的
importjava.util.HashMap;
importjava.util.Map;
/*
*作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?
*如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。
*但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗?
*针对我们目前的这种需求:仅仅知道学号,就想知道学生姓名的情况,Java就提供了一种新的集合Map。
*通过查看API,我们知道Map集合的一个最大的特点,就是它可以存储键值对的元素。这个时候存储我们上面的需求,就可以这样做
*学号1姓名1
*学号2姓名2
*学号3姓名3
*学号2(不行)姓名4
*学号4姓名4
*Map集合的特点:
*将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
*
*Map集合和Collection集合的区别?
* Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
* Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)
*
*注意:
* Map集合的数据结构值针对键有效,跟值无关
* HashMap,TreeMap等会讲。
* Collection集合的数据结构是针对元素有效
*
*Map集合的功能概述:
*1:添加功能
* Vput(Kkey,Vvalue):添加元素。这个其实还有另一个功能?先不告诉你,等会讲
*如果键是第一次存储,就直接存储元素,返回null
*如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
*2:删除功能
* voidclear():移除所有的键值对元素
* Vremove(Objectkey):根据键删除键值对元素,并把值返回
*3:判断功能
* booleancontainsKey(Objectkey):判断集合是否包含指定的键
* booleancontainsValue(Objectvalue):判断集合是否包含指定的值
* booleanisEmpty():判断集合是否为空
*4:获取功能
* Set<Map.Entry<K,V>>entrySet():???
* Vget(Objectkey):根据键获取值
* Set<K>keySet():获取集合中所有键的集合
* Collection<V>values():获取集合中所有值的集合
*5:长度功能
* intsize():返回集合中的键值对的对数
*/
publicclassMapDemo{
publicstaticvoidmain(String[]args){
//创建集合对象
Map<String,String>map=newHashMap<String,String>();
//添加元素
//Vput(Kkey,Vvalue):添加元素。这个其实还有另一个功能?先不告诉你,等会讲
//System.out.println("put:"+map.put("文章","马伊俐"));
//System.out.println("put:"+map.put("文章","姚笛"));
map.put("邓超","孙俪");
map.put("黄晓明","杨颖");
map.put("周杰伦","蔡依林");
map.put("刘恺威","杨幂");
//voidclear():移除所有的键值对元素
//map.clear();
//Vremove(Objectkey):根据键删除键值对元素,并把值返回
//System.out.println("remove:"+map.remove("黄晓明"));
//System.out.println("remove:"+map.remove("黄晓波"));
//booleancontainsKey(Objectkey):判断集合是否包含指定的键
//System.out.println("containsKey:"+map.containsKey("黄晓明"));
//System.out.println("containsKey:"+map.containsKey("黄晓波"));
//booleanisEmpty():判断集合是否为空
//System.out.println("isEmpty:"+map.isEmpty());
//intsize():返回集合中的键值对的对数
System.out.println("size:"+map.size());
//输出集合名称
System.out.println("map:"+map);
}
}
java判断集合是否重复用什么符号关键字
方法1:
利用Set集合来实现
将字符串中的每个字符依次存入Set集合中,Set集合会自动剔除重复元素。
判断Set集合的元素个数是否等于字符串的长度,若相等,则字符串中没有重复的字符。否则,字符串中存在重复的字符。
Code:
public static boolean isunique(String s){
Set set= new HashSet();
char[] chars= s.toCharArray();
for(char c:chars){
set.add(c);
}
return(set.size()==s.length());
}
方法2:
将字符串转化为字符数组。
对于每个字符,从字符串的开头检索,得到索引号index1
从字符串的末尾开始索引,得到索引号index2
判断index1是否等于index2
若相等,则字符串中不含重复字符。否则,字符串中含有重复字符。
Code:
public static boolean isunique(String s){
int index1,index2;
char[] chars= s.toCharArray();
for(char c:chars){
index1= s.indexOf(c);
index2= s.lastIndexOf(c);
if(index1!= index2) return false;
}
return true;
}
java有哪些集合
亲,Java的集合框架不是在百度知道里面说得清楚的。Java集合本身就很复杂,而且有一开始有些设计错误,后面在持续的修改。你想了解清除,可以看下Thinking in Java和疯狂Java讲义(为什么要两本呢?前一本讲得很系统,但是没有Java7的内容,所以要看后一本),看的时候配合查下官方文档。
如果你想快速了解使用的话,那么你只需要知道:在大多数情况下用ArrayList代替数组,用HaspMap存储Key-Value就行了。
OK,关于java中什么集合键可以重复和java判断集合是否重复用什么符号关键字的内容到此结束了,希望对大家有所帮助。