由于公司最近要招聘java项目经理,面试了好几个工作了7年以上的应聘人员,当时问到java集合时,涉及到其中原理,没有几个能说清楚的.由于公司对项目经理要求比较高,对代码评审能全盘把握.所以涉及到的java问题比较多.其实作为一个工作了好几年的java的技术人员或者项目经理,对java的基础理应比较熟悉.正好自己也整理下集合中几个常用的类,希望大家发表意见.
在java的集合中比较常用的的是list接口,实现list接口最常用的为Arraylist,LinkList,Vector等.下面分别介绍下.
ArrayList是比较常用的数据,创建一个对象为:ArrayList array=new ArrayList();ArrayList内部实现为:
public ArrayList(int initialCapacity) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
}
public ArrayList() {
this(10);
}
由上面代码可以得知ArrayList创建对象时为一个长度为10的数组,可以得知,ArrayList为数组结构,初始化长度为10.
ArrayList基本方法:
add(E)
往数组中增加对象,首先想到的是在已有数组长度加1,但是如果数组长度超出旧数组长度会是上面情况,通过查看源代码可以得知,如果新增加一个对象,数组长度超出原来数组长度,数组将会变成int newSize = (oldSize * 3)/2 + 1长度的数组;每次增加元素时,数组都要检查数组长度是否超出范围,如果超出范围就通过ensureCapacity(int minCapacity)方法扩展数组长度,在通过Arrays.copyOf方法生成新数组。
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
在ArrayList中还增加了add(index,E)方法,arraylist允许在指点位置插入对象,首先要判断index是否在数组范围之内,
public void add(int index, E element) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
ensureCapacity(size+1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
从代码中可以看出,首先要检查长度,和add(E)方法一样,然后把数组往后移动一位。
remove(E)
remove(E)为指点删除arraylist中的对象,如果E为null则遍历数组,查询数组是否为null,如果为null通过fastRemove方法删除数组,如果E不为null则直接通过equals判断对象,再删除。 在删除元素时,并不会减少数组容量,如果想减少数组容量,可以通过equals方法。
get(index)
get方法内部实现比较简单,先检查index是否在数组范围内,再返回对象。
contains(o)
判断arraylist中是否包含某个对象,contains分两不处理,第一步如果o为null,循环查找arraylist中,查看是否包含null的对象如果包含返回结果;第二步o不为null情况,循环查找arraylist对象,通过equals比较,返回结果。
其他:
- ArrayList内部结构为数组,容量可以无限制增加
- ArrayList为非程安全
后面我再对list和map的几个常用类进行性能比较.看看在高并发下应该用那些类
分享到:
相关推荐
3. **数组与集合**:数组是存储同类型数据的基本结构,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了更灵活的数据存储方式。学习如何使用这些数据结构进行数据操作和算法实现是Java编程的重要...
1. 在程序中声明一个 HashSet 集合类的对象 hset,将以下字符串元素添加到 hset 中:”hello”,”world”,”你好”,“Java”,“Java 泛型”和“Java 集合”。然后,用 hset 的 iterator 遍历该集合。
7. **使用ArrayList对象**:在JSP中使用Java集合类时,需要通过`…" %>`导入相应的包。因此,正确答案是C。 8. **JavaBean规范**:JavaBean是遵循特定规范的Java类,通常为公共类且包含公共无参构造器。选项A和B不...
4. **数组、字符串、向量与哈希表**:讨论这些数据结构的使用,字符串作为Java中的核心类型,向量(ArrayList)和哈希表(HashMap)是Java集合框架的一部分。 5. **泛型、枚举与for语句的简化写法**:泛型提供了...
ArrayList是常用的一种java集合,在开发中我们常常需要从ArrayList中删除特定元素。有几种常用的方法: 朴实的方法,使用下标的方式: ArrayList<String>al=new ArrayList(); al.add("a"); al.add("b"); ...
Java面试中的核心知识点涵盖了许多方面,这里...以上内容涵盖了Java基础、面向对象、集合框架、多线程以及设计模式等关键知识点,这些都是Java面试中常见的问题。掌握这些知识点有助于提升面试成功率和实际开发能力。
List是Java集合框架(Collections Framework)的一部分,它允许我们存储一组有序的对象,可以重复,并且支持索引访问。在这个系统中,List将被用来存储货物的信息,如商品ID、名称、价格、库存量等。 首先,我们...
在尽可能短的篇幅里,将所有集合与并发集合的特征,实现方式,性能捋一遍。适合所有”精通Java”其实还不那么自信的人阅读。 不断更新中,请尽量访问博客原文。 List ArrayList 以数组实现。节约空间,...
`java.util`包提供了许多实用工具类,如集合框架、遗留的集合类、事件模型、日期和时间设施、国际化以及用于并发操作的实用工具等。例如: - **Collection Framework**:包括了`List`、`Set`、`Map`等接口及其实现...
为什么使用集合? 开发中会使用大量相同数据类型的情况,如果使用数组来解决...Java中集合的【总接口】Collection,Java中所有和集合有关的内容都是 Collection接口的子类或者实现类 interface Collection包含: int
Java集合框架是处理对象集合的重要工具。本书详细阐述了`List`、`Set`、`Map`接口及其实现类的使用,包括`ArrayList`、`LinkedList`、`HashSet`、`HashMap`等,以及高级集合类如`TreeSet`、`TreeMap`、`...
在标题和描述中,我们关注的是“泛型集合”这个主题,它是Java集合框架的一部分。 泛型集合的概念可以理解为参数化类型,即将类型作为参数传递给集合类。这意味着我们可以限制集合只能存储特定类型的对象。例如,当...
集合 层次一:针对不同特点的数据,能够选择对应接口的主要的类进行实例化和方法的调用 层次二:熟悉接口的不同的实现类... |—–ArrayList/LinkedList/Vector |—–Set:存储无序的、不可重复的数据: 高中的集合
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现。...–ArrayList Collection<–List<–LinkedList Collection<–Set<–HashSet
这部分内容对于理解和使用Java集合框架至关重要,可以帮助开发者更高效地处理数据结构问题。 ### 网络编程(Networking) 网络编程是现代软件开发不可或缺的一部分,尤其是在互联网应用中。本书第三章详细介绍了...
在Java中,可以使用ArrayList或LinkedList等集合类来构建这样的数据结构。每个节点表示一个对象,边则表示节点之间的连接。 **算法实现** 1. **初始化**:程序开始时,先创建一定数量的初始节点,它们随机连接,...
4. **集合框架**:Java集合框架是存储和操作对象的重要工具,包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。深入理解它们的特点和使用场景,以及泛型的运用。 5. **IO流**...
- **数据结构**:理解并使用数组、集合框架(如ArrayList、LinkedList)来存储和操作牌的序列,以及玩家的状态。 - **控制结构**:用if-else语句、switch-case进行条件判断,实现发牌、出牌等逻辑。 2. **图形...
set.add(i)) { // 如果add返回false,说明已经是集合内的元素 duplicates.add(i); } else { set.add(i); } } return duplicates; } ``` 以上就是关于Java数组的基础知识及一些练习题的解答思路,希望对学习...