掌握Collection集合的定义和使用方法
1、Collection集合的作用:可以定义一个随时改变的数组
2、定义Collection集合的相关 *** 作:
Collection 抽象接口 定义集合的相关 *** 作
|-- List 列表 数组 接口 特点 :有序 可以重复
|--ArrayList
|-- LinkedArrayList
|-- Set "集合" 特点 : 无序 不重复
|---HashSet
3、改变集合中的元素方法:
增加一个对象 :add 在指定位置添加 add(i,o)
删除一个对象 : remove 移除指定位置的对象 remove(i,o)
获取元素个数 :size
删除所有元素 ,清空 : clear
判断某个集合中是否含有某个元素 :contains
判断某个集合是否为空 : isEmpty
判断两个集合是否相同(比较两个集合里面地内容) : equals
取两个集合的交集:retainAll
访问某个对象在某个位置的索引 :indexOf访问初始位置 lastIndexOf访问最后一次出现的位置
获取某个范围里面的对象 subList(i,o)
修改某个位置的值: set(i,0)
注:集合里面只能存放对象
4、集合的遍历:
(1)使用使用Iterator来遍历
hasNext 判断是否有元素
next 获取下一个对象
remove 删除当前遍历后的对象
(2)for -each (增强for循环) 快速循环
(3)for- i循环
ArrayList (连续的内存空间 )
优点:
访问方便 通过get ()方法就能访问
缺点:
元素的删除和添加效率低
LinkedList内部使用链表链接 不一定连续(基本不连续)
优点:增减删除效率高 缺点:访问
5、基本数据类型对应的包装类
byte char int long float double boolean
Byte Char Integer Long Float Double Boolean
ArrayList里面自动将基本数据类型包装为对应的类
6、将ArrayList转变为普通数组 toArray
7、lambda函数
8、自己写一个比较器:
今天所讲的Collection集合的使用比较简单,但是,还是对lambda 有点不是太了解。感觉今天讲的知识点虽然很枯燥,但是有必须要掌握。
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变;
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变;
Map:适合储存键值对的数据。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
创建一个student对象,对象了有一个属性,又来表示每个人的成绩
public class Student {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
thisscore = score;
}
}
实现类
import javautilHashSet;
import javautilSet;
public class AddScore {
private static Set<Student> set=new HashSet<Student>();
public static void main(String[] args) {
//创建4个student对象,将他们全部加到set集合中
Student s=new Student();
ssetScore(50);
setadd(s);
Student s2=new Student();
s2setScore(54);
setadd(s2);
Student s3=new Student();
s3setScore(68);
setadd(s3);
Student s4=new Student();
s4setScore(60);
setadd(s4);
//实例化对象
AddScore add= new AddScore();
//调用方法,得到总成绩
int score=addaddScore(set);
//输出总成绩
Systemoutprintln(score);
}
//该方法用来遍历set集合,得出总成绩
public int addScore(Set<Student> set){
int allScore=0;
for (Student student : set) {
allScore+=studentgetScore();
}
return allScore;
}
}
迁移自 开源中国
第一反应:两重循环解决问题,对,问题是可以解决,但是通过小括号中的提示可以看出,明显是在考效率的问题。
所以这种O(n^2)的时间复杂度是不行的。
继续想了一下:一次循环,遍历其中一个集合,拿集合中的元素去第二个集合中通过二分查找法查找,确定是否重复。
所以这种时间复杂度是:O(nlogn),较之前好些,但是还有更好的,可以是O(n)嘛?
经过面试官的提醒:首先对两个集合按照升序排列,再对两个集合定义各自的游标,一次循环,通过游标查找相同元素,原理是:如果从A集合中取出的元素小于B集合中的元素,那么将A的游标下移;如果相等则将元素存入第三个集合中,并且将A的游标下移;如果大于B集合中的元素,则将B的游标下移;直到遍历完某一个集合为止。
如果有更好的还请多多指教。
如题目所示。
首先,我们先创建两个数组,如下:
1、当然我们可以采用遍历数组的方式做,如下:
这样子,我们找到了相同的元素,但是,数组中依然会存在相同的元素。
我们可以用得到后的数组,生成一个集合,这样子就得到了最终的结果
2、使用集合:
得到的结果是:
这样子,就直接得到了我们需要的结果(不考虑顺序)
再补充几个可变集合的方法
3我们可以试一下用谓词来做
打印的结果
可见,用谓词的话,更方便一些,我们可以把得到的结果,放到集合中
4我们也可以使用数组相减的方式
结果如下:
我们也可以将其转为集合
假如文章中有不对的地方,请您指出,我们共同进步。
以上就是关于Collection 集合的定义和使用全部的内容,包括:Collection 集合的定义和使用、Java中Set、List、Map集合类(接口)的特点及区别。分别有哪些常用实现类。、java创建一个HashSet对象,存储多个Student对象, for循环出每个元素,并计算学生总成绩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)