Java 集合collection 以及ArrayList、LinkedList、HashSet,遍历Traversal及迭代器

//Collection-集合。
//它是一个容器。用于存放多个数据。
//今天学习的所有集合框架都是只能存放对象类型的。
//不能存放基本数据类型。
//长度是不定长,可以根据元素的多少自动适应。
//集合框架都在java.util包下。

//作为容器,能存放东西。
//-----能添加
// add(E e)
// addAll(Collection c)
//
//-----能删除
// clear()
// remove(Object o)
// removeAll(Collection c)
//-----是否包含某个元素
// contains(Object o)
// containsAll(Colletion c)
//-----判断是否相同
// equals(Collection c)
//-----容器里元素的数量
// size()
//-----转换成数组
// toArray()

//求数组的元素个数
//数组名.length
//字符串(String、StringBuilder、StringBuffer)求字符串长度
//字符串对象.length()
//容器获取元素个数
//容器.size()

//为什么把Collection定义成接口而不是一个类?
//作为容器,不清楚容器里究竟要放什么?不清楚对存放的
//元素有什么要求?
//1、我要求容器里的元素不能重复(有一种容器,能自动去重)
//2、我要求容器里的元素可以重复(有一种容器,能重复出现元素)
//3、我要求容器里的元素有序(像数组一样有下标)
//4、我要求容器里的元素无序(读取的顺序和存放顺序无关)

/*
* Collection(没提供直接获取元素的方法。间接提供,toArray。你可以通过下标去访问元素)
* List—列表(有序的Collection)允许重复。
* Set—集合
*
* */

  • List(有序,有下标-index)
    * 相比Collection增加了一些方法。针对index的方法
    * -----增加
    * add(index,element)
    * addAll(index,collection)
    * -----获取元素
    * get(index)
    * -----获取元素的位置
    * indexOf(element)
    * lastIndexOf(element)
    * subList(fromIndex,toIndex)
    * -----删除元素
    * remove(index)
    * -----修改元素
    * set(index,element)
    * -----

  • List接口有2个比较常用的实现类。
    * 所谓实现类就是实现了接口中全部方法的类。
    * ArrayList:可变数组(底层是数组)
    * 除了List接口描述的方法之外,提供了
    * ensureCapacity(capacity)//扩容
    * trimToSize()//减容
    *
    * ArrayList创建对象的时候,如果没有指定要存放什么类型的元素
    * 可以存放任何对象类型的元素。
    *
    * ArrayList底层实现原理:
    * 内部封装了一个数组。所以可以非常方便的使用下标去
    * 访问元素。
    * 优势:读取数据特别快。因为有下标。
    * 劣势:插入、删除元素很慢。
    *
    * LinkedList:可变数组(底层是链表–双向链表)
    * 特点:插入、删除效率很高。只需要改变指向。
    * 缺点:访问元素特别慢。找某个index,始终从头往后找。
    * 除了实现了List接口中的方法,还提供了
    * addFirst(element)
    * addLast(element)
    * getFirst()
    * getLast()

    //应该如何选择呢?
    //看增删多还是访问多。
    //增删多 使用LinkedList
    //访问多 使用ArrayList

    //对程序员而言,就是变换一下类名。
    //方法都是一样的,因你们都实现了List接口

  • Set是Collection的子接口。
    * 继承了Collection接口中的全部方法。
    * 自身并未定义新方法。
    *
    * Set代表的是数学中的集合。
    * 有2个特点:
    * 1、元素不允许出现重复。
    * 2、元素无序。
    * Set常用的实现类是HashSet
    * HashSet
    *
    ArrayList list = new ArrayList();
    //ArrayList实现了List接口,因此List接口定义所有方法,都可以调用
    list.add(“hello”);
    list.add(“world”);
    list.add(“Java”);
    System.out.println(list);
    //定义ArrayList的时候,需要指定元素类型。
    ArrayList list = new ArrayList();
    //List的遍历。(List实现类的遍历)
    List list = new LinkedList();
    list.add(“貂蝉”);
    list.add(“西施”);
    list.add(“杨贵妃”);
    list.add(“王昭君”);
    System.out.println(list);

//第一种方法:foreach
//foreach底层是Iterator,Iterator是集合的替身,
//在Iterator迭代期间,不能对原集合进行增删操作。
for (String name : list) {
System.out.println(name);
if(name.equals(“西施”)) {
//list.remove(name);
//list.add(“东师”);
}
}
System.out.println("------------");
//第二种方法:for循环
for(int i = 0;i < list.size();i++) {
String name = list.get(i);
System.out.println(name);
if(name.equals(“西施”)) {
// list.remove(name);
// i–;
}
}
System.out.println(list);
System.out.println("------------");
//第三种方法:把list转成数组,对数组遍历
String[] names = new String[list.size()];
list.toArray(names);
for(int i = 0; i < names.length;i++) {
System.out.println(names[i]);
if(names[i].equals(“西施”)) {
//list.remove(i);
}
}
System.out.println(list);
//第四种方法:使用Iteretor遍历。
//Iteretor迭代器。
//当一个方法的返回值是一个接口的时候,说明返回的不是
//接口,是这个接口的实现类。
Iterator it = list.iterator();
while(it.hasNext()) {
String name = it.next();
System.out.println(name);
if(name.equals(“西施”)) {
//list.remove(name);//不能用list删
it.remove();//可以用迭代器删。
//迭代器删除之后,原集合元素也会被删除。
public class LessonHashSet {
public static void main(String[] args) {

HashSet
/*
Set s = new LinkedHashSet();
s.add(“hello”);
s.add(“world”);
s.add(“Java”);
s.add(“zhangsan”);
s.add(“hello”);
s.add(“Java”);
System.out.println(s);

	List<String>list = new ArrayList<String>(s);
	System.out.println(list);
	System.out.println(list.get(1));
	list.add("zhangsan");
	list.add("world");
	System.out.println(list);
	
	Set<String> set = new HashSet<String>(list);
	System.out.println(set);
	*/
	
	
	Set<Teacher> set = new HashSet<Teacher>();
	set.add(new Teacher("崔亚允",22));
	set.add(new Teacher("李赛",42));
	set.add(new Teacher("崔亚允",23));
	set.add(new Teacher("崔亚允",22));
	set.add(new Teacher("李赛",42));
	System.out.println(set);
	
	
}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值