发表于: 2018-01-18 23:09:02
1 669
今天做的事情:
集合:list, set , map ,
可以看到都继承与collection。collection接口也定义需要操作集合的方法:如 add(Object o) , addAll(Collection c), celar(), equles(Object o), hasCode()等。具体看JDK文档。
2.使用Iterator接口遍历几何元素
Iterrator接口隐藏了各种Collection实现类的细节,向应用程序提供了遍历Collection集合元素的统一编程接口。Iterator接口里定义了如下三个方法:
Boolean hashNext(): 如果被迭代的集合元素还没有被遍历,则返回true.
Object next(): 返回集合里的下一个元素。
Void remove(): 删除集合里上一次next方法返回的元素。
**当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterator的remove方法删除上一次next方法返回的集合元素才可以;否则将引发java.util.Concurrent ModificationException异常。
就是下面这种,
不能用集合直接删除。
使用iterator.remove()
ArrayList<String> lists = new ArrayList<String>();
lists.add("A");
lists.add("B");
lists.add("C");
lists.add("D");
lists.add("E");
lists.add("F");
lists.add("G");
//迭代输出 初始化 实例化
Iterator<String> iterator1 = lists.iterator();
String str ;
while (iterator1.hasNext()){
str = iterator1.next();
if(str.equals("A")){
iterator1.remove();
System.out.println("成功删除"+str);
break;
}
//System.out.println(iterator1.next());
}
2: Set集合
Set基本和Collection一直,特点是不允许包含重复值。Set判断两个对象是否相同是会根据equales。.HashSet是Set的典型实现,HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
特点:不能保证元素的排列顺序;不是同步的,不是线程安全;集合值可以是null。
HashSet集合判断两个元素的相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。
//类A的equals方法总是返回true,但没有重写其hashCode()方法
class A
{
public boolean equals(Object obj)
{
return true;
}
}
//类B的hashCode()方法总是返回1,重写其equals()方法
class B
{
public int hashCode()
{
return 1;
}
@Override
public boolean equals(Object obj) {
return true;
}
}
//类C的hashCode()方法总是返回2,但没有重写其equals()方法
class C
{
public int hashCode()
{
return 2;
}
public boolean equals(Object obj)
{
return true;
}
}
public class Set {
public static void main(String[] args) {
HashSet books = new HashSet();
//分别向books集合中添加2个A对象,2个B对象,2个C对象
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());
System.out.println(books);
}
}
一个对象B,两个A,一个C。
因为这三个对象,只有A只有equals方法,没有hasCodes方法,所以会创建两个对象。
2.1 LinkedHashSet
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
public static void main(String[] args) {
LinkedHashSet books = new LinkedHashSet();
books.add("第一个");
books.add("第二个");
//删除 Struts2权威指南
books.remove("第一个");
//重新添加 Struts2权威指南
books.add("第一个");
System.out.println(books);//[第二个, 第一个]
}
按顺序输出。
3 .各Set实现类比较:
HashSet和TreeSet是set的两个典型实现,HashSet的性能比TreeSet好(特别是最常用的添加,查询元素等操作).只有当需要一个保持排序的Set时,才应该使用TreeSet,否则使用HashSet
LinkedHashSet:对于普通的插入删除操作,比HashSet慢,遍历会更快。
另外:Set的三个实现类HashSet,TreeSet和EnemSet都是线程不安全的,如果有多个线程访问一个Set集合,则必须手动保持同步:
可用Collections的工具类:例如:
SortedSet s = Collections.synchronizedSortedSet(new TreeSet(…));
4 : 写部署脚本有问题,正在修改。
遇到的问题:
部署脚本出错
这个jar包问题。
收获:
早上看的集合,不算白看,部署有很多问题。
评论