集合要素加代码演示

Collections :是一个工具类 专门对集合操作 它里面的方法全部是静态的它没有对外提供构造函数 不需要创建对象

Collection : 是一个集合框架中的顶层接口,它里面定义了单列集合的共性方法问题

List :对元素都有定义索引。有序的。可以重复元素。 他的常用子类有ArrayList   跟   LinkedList     。​

演示ArrayList​:​

import java.util.*;
class array 
{
public static void main(String[] args) 
{
ArrayList<String> a=new ArrayList<String>();//这里指定了String泛型 
//也就是说添加元素只能添加String
a.add("java1");//添加元素
a.add("java2");
a.add("java3");
a.add("java1");
Iterator<String> it=a.iterator();//利用迭代器打印
while (it.hasNext())
{
System.out.println(it.next());
}
}
}

上面打印是按照顺序打印  因为list里元素可以重复 每个元素都是都有指针

LinkedList 跟ArrayList差不多  ArrayList是底层是数组数据结构  LinkedList底层是链表数据结构  ArrayList查询速度快  LinkdeList删除速度快


Set :不可以重复元素。无序。 他的常用子类有 TreeSet   HashSet

TreeSet  (底层是二叉树数据结构 构造的时候要么实现 Comparable 重写compareTo方法要么自定义一个比较器Comparator 重写 compare 方法)。

HashSet (底层是哈希表数据结构 构造的时候要覆盖hashCode() 还有equals()两个方法 )是通过HashCode和equals来保证元素的唯一性

下面演示TreeSet:

import java.util.*;
class TreeSeta 
{
public static void main(String[] args) 
{
TreeSet<String> a=new TreeSet<String>(new bjq());//这里指定了String泛型  在构建Tree的时候建就指定了一个比较器  也可以再这里写内部类
//也就是说添加元素只能添加String
a.add("java1");//添加元素 元素重复了不可以添加
a.add("java2");
a.add("java3");
a.add("java1");
Iterator<String> it=a.iterator();//利用迭代器打印
while (it.hasNext())
{
System.out.println(it.next());
}
}
}
class bjq implements Comparator<String> //实现一个比较器接口 重写compare方法
{
public int compare(String a ,String a1)
{
int temp=a.compareTo(a1);
if(temp>0)
return 1;
if(temp<0)
return -1;
return 0;
}
}

上面演示的是TreeSet

下面演示HashSet:

import java.util.*;
class xues
{
private String name;
private int nianling;
xues(String name,int nianling)
{
this.name=name;
this.nianling=nianling;
}
public String getname()
{
return name;
}
public int getnianling()
{
return nianling;
}
public String toString()
{
return "姓名是:"+name+" 年龄是:"+nianling;
}
public int hashCode()//重写了hashCode
{
return this.name.hashCode()+this.nianling*2;
}
public boolean equals(Object obj)//重写的equals
{
if(!(obj instanceof xues))
throw new RuntimeException("传错了");
xues x=(xues)obj;
return this.name.equals(x.name) && this.nianling==x.nianling;
}
}
class hash 
{
public static void main(String[] args) 
{
HashSet<xues> aa=new HashSet<xues>();
aa.add(new xues("张珊",30));
aa.add(new xues("李四",30));
aa.add(new xues("张珊",30));
Iterator<xues>it=aa.iterator();//用迭代的方法将元素取出
while (it.hasNext())
{
xues a=(xues)it.next();
System.out.println(a.getnianling()+"    "+a.getname());
}
}
}

Map 常用类有 HashMap   TreeMap

HashMap 特点是:底层是哈希表数据结构,允许使用null键null值,该集合不同步     

TreeMap 特点是:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序性方法Map集合里面存的都是键值对

//下面是演示  包含两个集合都可以使用

import java.util.*;
class xues implements Comparable<xues>
{
private String name;
private int nl;
xues(String name,int nl)
{
this.name=name;
this.nl=nl;
}
public String getname()
{
return name;
}
public int getnl()
{
return nl;
}
//下面重写了3个方法  关于TreeMap集合跟HashMap两个集合需要用到的方法

//也就是说可以既可以使用TreeMap  又可以使用HashMap 
public int compareTo(xues x)
{
int temp=this.name.compareTo(x.name);
if(temp==0)
return new Integer(this.nl).compareTo(new Integer(x.nl));
return temp;
}
public int hashCode()
{
return this.name.hashCode()+this.nl*3;
}
public boolean equals(Object obj)
{
if(!(obj instanceof xues))
throw new RuntimeException("类型不匹配");
xues x=(xues)obj;
return this.name.equals(x.name) && this.nl==x.nl;
}
public String toString()
{
return name+"___"+nl;
}


}
class  si
{
public static void main(String[] args) 
{
Map<xues,String> m=new HashMap<xues,String>();
m.put(new xues("zhangshan4",31),"shanghai");//所谓的键与值 指的是他们有映射关系
m.put(new xues("shangshan1",30),"guangxi");
m.put(new xues("shangshan1",30),"guangxide");
m.put(new xues("zhangshan3",30),"guangxi");
m.put(new xues("zhangshan2",34),"guangdong");
m.put(new xues("zhangshan0",33),"beijin");
//第一次方法打印
Set<xues> s=m.keySet();
Iterator<xues> it=s.iterator();
while (it.hasNext())
{
xues x=it.next();
String x1=m.get(x);
System.out.println(x+"___"+x1);
}
//第二种方法打印
Set<Map.Entry<xues,String>> s1 =m.entrySet();
Iterator<Map.Entry<xues,String>> it1=s1.iterator();
while (it1.hasNext())
{
Map.Entry<xues,String> s2=it1.next();
xues xs1=s2.getKey();
String diz=s2.getValue();
System.out.println(xs1+"____"+diz);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值