集合

  学习集合的时候感觉乱七八糟的,今天趁着复习的时间好好总结一番,如有不如意的地方请指出,鄙人将感激不尽。

 首先可以根据集合框架图来理顺这章的内容。


 上图只是为了很好地说明问题,并不是完整的Collection集合图,如EnumSet 、AbstractQueue等都没在图中表示出来。

  1.set集

   在java语言中,java.util.set与数学上的set集合的意义一致,都是不允许有重复的元素出现。set接口只有从Collection继承下来的方法,并没有添加自己的新方法。注意这儿并不代表它的实现类没有添加新的方法。

   A. 散列集 HashSet

   HashSet是无序集,它的顺序是不定的。

   当向其中添加元素时,先调用元素对象的hashCode()方法计算它的散列码,若散列码指向的位置为空,则可以加进去,反之则需要调用equals()方法判断两个对象是否相同,若相同,则不允许加入,反之能加入进去。

  

public class Collection {

public static void main(String[] args)
{
	String str[]={"we","are","a","student","hello","a"};
	HashSet<String> set=new HashSet<>();
for(String s:str)//给set添加元素
{
set.add(s)	;
}
System.out.println("第一次输出");
for(Iterator<String> it=set.iterator();it.hasNext();)//迭代器
{
	
	System.out.println(it.next());
}
//添加一个相同的字符串的情形
String  ss="a";
set.add(ss);
System.out.println("第二次输出");
for(Iterator<String> it=set.iterator();it.hasNext();)//迭代器
{

	System.out.println(it.next());
}
}
}
输出的结果:

第一次输出
hello
are
student
a
we
第二次输出
hello
are
student
a
we

  B.TreeSet

  TreeSet属于有序集,默认情况下是从小到大的顺序排列。同时也允许我们将自定义的Comparator对象传递给TreeSet构造器告诉TreeSet使用所提供的这种方式排序。

  代码说明:

public class Collection {

public static void main(String[] args)
{
TreeSet<Person> sorttreeset=new TreeSet<>(new Comparator<Person>()
		{
	 public int compare(Person a,Person b)	
     {
	   return a.getAge()-b.getAge();
      }
		});
sorttreeset.add(new  Person("张山",21));
sorttreeset.add(new  Person("丽丽",20));
sorttreeset.add(new  Person("海尒",17));
sorttreeset.add(new  Person("杰克",24));
sorttreeset.add(new  Person("魔姬",21));

//按自己定义的方式排序
System.out.println("输出sorttreeset");
for(Iterator<Person>it=sorttreeset.iterator();it.hasNext();)
{
System.out.println(it.next());
}
}
}
 运行结果:


输出sorttreeset
Person [name=海尒, age=17]
Person [name=丽丽, age=20]
Person [name=张山, age=21]
Person [name=杰克, age=24]

  由运行结果可以看出,出现重复元素时,会把多余的元素删除;

 若存储的是自定义的类时,一定要定义它的比较器。否则会报错。

C.LinkedHashSet

  数据结构是一种双链表,且是有序集,但是它的有序与TreeSet的有序稍微有点差别,它的有序是指按插入的顺序排列。LinkedHashSet中的方法只是继承了HashSet和Set中的方法。

 代码:

public class Collection {

public static void main(String[] args)
{
LinkedHashSet<String>  linkedhashset=new 	LinkedHashSet<>();
String str[]={"hello","welcome","to","nanchang"};
for(String s:str)
{
linkedhashset.add(s);
}
for(Iterator<String>it=linkedhashset.iterator();it.hasNext();)
{
System.out.println(it.next());
}
}	
运行结果:

hello
welcome
to
nanchang

2.List接口

 java.util.List<E>是列表,它表示的是有序列表(插入顺序)。允许包含重复的元素,也允许包含null元素。除了继承Collection的方法外,还增添了自己特有的方法,常用的有subList(),ListIterator<E> listIterator(),indexOf(Object o)等。

 A.ArrayList

 ArrayList是属于动态数组,它的存储大小不固定,可以储存null元素。

代码:

public class Collection {

public static void main(String[] args)
{
	ArrayList<String>  arraylist=new ArrayList<>();
	String str1[]={"hello","welcome","to","nanchang","nanchang",null};
	for(String s:str1)
	{
		 arraylist.add(s);
	}
	for(Iterator<String>it= arraylist.iterator();it.hasNext();)
	{
	System.out.println(it.next());
	}	
}
}
运行结果:

hello
welcome
to
nanchang
nanchang
null


B.LinkedList

LinkedList的数据结构是双向链表,它与ArrayList的优缺点可以很快就知道。操作与ArrayList类似。只不过是有属于自己的一些方法而已。如previous()。


。。。。队列后续补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值