类和集合
Java的常见类和对象
Java有一系列功能强大的可重用类,分别在不同的包中,这些包按功能可划分为:语言包 java.lang(language)、输入/输出包java.io、实用程序包java.util(utility)、小应用程序包java.applet、图形用户接口包javaswing、java.awt和网络包java.net等。有时人们称前三种包为java的基础包。
Java常用包的简单介绍如下:
1)javalang包主要含有与语言相关的类,如Math类,System类。java.lang包由解释程序自动加载,不需显式说明,
2)java.io包主要含有与输入输出相关的类,这些类提供了对不同的输入和输出设备读写数据的支持,这些输入和输出设备包括键盘、显示器、打印机、磁盘文件和网络等。
3)java.util包包括许多具有特定功能的类,有日期、向量、哈希表、列表和堆栈等。
4)javaswing包和javaawt包提供了创建图形用户界面元素的类。通过这些元素,编程者可以控制所写Applet或程序的外观界面。该包中包含定义窗口、对话框、按钮、复选框、列表、菜单、滚动条及文本域的类。
5)javanet包含有与网络操作相关的类,如TCP socketsURL以及二进制码向ASCII码转换的工具。
6)javaapplet包含有控制Hotjava浏览器的类,这些类可以控制HTML文档格式、应用程序中的声音资源等,其中Applet类是用来创建包含于HTML页内的applet必不可少的类
Object类
Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object 类中的 public 方法。
String类
StringBuilder类
Scanner类
Math类
Character 类
Character 类用于对单个字符进行操作。
Character 类在对象中包装一个基本类型 char 的值
Java语言为内置数据类型char提供了包装类Character类。
Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象。
System类
java.util包中的集合类
stack类
Vector类
Interger类
hashtale类
Set也是一个接口,它表示一个无重复元素的集合,无序,唯一(它是通过判断hashcode来判断是否重复,如果得不到我们想要的结果,那就重写equals 方法)
Set 的实现类:hashSet
Collection类
有多种容器类型:
List 以特定的顺序保存元素
Set 元素不能重复
Queue 链表,只能从一端插入对象,从另一端取出 遵循先进先出原则
Map 键值对插入
链接: python和java数据类型
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet
List下有ArrayList,Vector,LinkedList
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
Collection接口下还有个Queue接口,有PriorityQueue类
Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。
TreeMap是有序的,HashMap和HashTable是无序的。
Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。
这就意味着:
Hashtable是线程安全的,HashMap不是线程安全的。
HashMap效率较高,Hashtable效率较低。
如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。
Hashtable不允许null值,HashMap允许null值(key和value都允许)
父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap
Java集合中List,Set以及Map等集合体系详解
Java list与Python list相比较
Java List:有序的,可重复的。(有序指的是集合中对象的顺序与添加顺序相同)
Python list(列表)是有序的,可变的。
Java List分类:
1.ArrayList:底层使用数组,线程不安全,查找速度快,增删速度慢
在迭代过程中,对集合对象的增删会出现异常
2.LinkedList:底层使用链表,线程不安全,查找速度慢,增删速度快
后进先出,类似于栈
3.Vector: 底层使用数组,线程安全,查找速度快,增删速度慢,被ArrayList替代
Python 列表无分类,list是Python的基本数据结构。
Java Map与Python dict相比较
Java Map属于集合,但不属于Collection体系中一部分,无序的,不可重复,以键值对形式存在。
Python dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度,dict的key必须是不可变对象,因为dict根据key使用哈希算法来计算value的存储位置。
Java Map分类:
— HashMap:底层使用的数据结构是哈希表
保持键的唯一性同HashSet相同。
— TreeMap:底层使用的数据结构是二叉树
保持键的唯一性同TreeSet相同。
Python 字典无分类,dict是Python的基本数据结构。
Java Set与Python set相比较
Java Set底层使用的就是Java Map的键,值被设置为空,因此Set与Map保持唯一性的原理是相同的。
Python set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
Java Set:无序,不可重复
—HashSet:底层使用哈希表,线程不安全
保证对象唯一的方式:重写hashcode(),equals(Object obj).使用哈希算法导致无序
—TreeSet:底层使用二叉树,线程不安全
在使用add方法添加对象时,会对加入集合的对象进行排序
保证对象唯一的方式:1 实现Comparable接口,实现compareTo()方法的返回值是0,则不能加入。2 创建一个类,实现Comparator,实现compare()方法。
Python 集合无分类,set是Python的基本数据结构。
Java的集合框架
集合框架被设计成要满足以下几个目标。
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。