CONTENTS
Working with collections such as List, Map, and Set is a daily occurrence for Apex developers. While their basic application is straightforward, there are some advanced quirks that can propel you to the next level. Join us in this webinar to learn how to master Salesforce Apex collection fundamentals such as list sorting, object hash code, and more.
Apex Arrays are the collection of similar elements, where the memory is allocated sequently. Each element in the array is located by index and the index value starts with zero.
Array Syntax
<String> [] arrayOfProducts = new List<String>();
Dynamic declaration
Datatype[] arrayname =new DataType[size];
Static declaration
DataType[] arrayname =new DataType[] {20,40};
Elements in the array are referred using
clone: Returns a copy of the collection.
isEmpty: Returns false if the collection has elements, true if empty.
size: Returns the number of elements in the collection as an Integer.
Difference between Array and Collections
Arrays | Collections |
Array is a collection of similar elements. | It is a collections of homogeneous and heterogeneous elements. |
Arrays can not grow and shrink dynamically. | Collections can grow and shrink dynamically. |
Arrays can be accessed faster and consume less memory. | Collections are slow when compared with arrays and they consume more memory. |
Let us understand the working of an Arrays in Apex by writing a simple program to display Array of strings in PageBlockTable. To create an Apex class in Salesforce, login to Salesforce -> Developer console -> File -> File -> New -> Apex class.
- Enter the Apex class name to create new Apex Class.
Apex Class code
Public class ArrayExample { Public String[] myval{set;get;} Public String name{get;set;} Public ArrayExample() { name = 'Prasanth'; myval = new String[] {'Malli','Adarsh','kiran'}; } }
Visualforce Page
When referring Apex class variables in the Visualforce page, we should use getter and setter method.
<apex:page controller="ArrayExample" > <apex:form> <apex:pageBlock> <apex:pageBlockTable value="{!myval}" var="a"> <apex:column value="{!a}"/> </apex:pageBlockTable> <apex:outputLabel>{!name}</apex:outputLabel> </apex:pageBlock> </apex:form> </apex:page>
Output
What are the drawbacks of array?
- The Apex supports arrays to store data. Arrays are of a fixed size which is defined during initialization of the array.
- Developer typically require a data structure which is flexible in size, so that they can add and remove items from this data structure on request. To avoid that every developer has to implement his custom data structure the Apex library provide several default implementations for this via the collection.
- Apex collections are dynamic in size, e.g. a collection can contain a flexible number of objects. More theoretical said, collection is a data structure which contains and processes a set of data. The data stored in the collection is encapsulated and the access to the data is only possible via predefined methods.
- For example if your application saves data in an object of type People, you can store several People objects in a collection.
- Arrays and collections are a family of data types that contain a sequence of values . It includes Lists , Arrays, Sets, and Maps.
What is Collections?
Collection is a group of individual objects represented as a unit (unit). Sometimes you need to group multiple items in a single unit. Collections can increase and decrease dynamically based on business requirements.
Types of Collections in Apex Salesforce
There are three types of collections:- List (ordered and allow duplicates)
- Map (Key and value pair)
- Set (unordered and won't allow duplicates)
List
It is an ordered collection of primitives, sObjects, collections, or Apex objects based on indices as well as List allows duplicacy of the elements.List types collection is the most widely used collection in Apex. Lists are used to store data in sequence. It means if you want to store a string into a series we are going to use list. If we want to store numbers into a series we are going to use a list. Any type of data can be stored in a list. The position of the first element in a list always starts with Zero [0]. The list can hold duplicate and null values. The reason behind why Lists are so significant is on the grounds that the yield of each SOQL inquiry is a List. One of the important parts of Lists is that they are ordered. The list can be nested.
Example
Below is the list which contains the List of a primitive data type (string), that is the list of cities.
List<string> ListOfCities = new List<string>(); System.debug('Value Of ListOfCities'+ListOfCities);
Declaring the initial values of list is optional. However, we will declare the initial values here. Following is an example which shows the same.
List<string> ListOfStates = new List<string> {'NY', 'LA', 'LV'}; System.debug('Value ListOfStates'+ListOfStates);
List of Accounts (sObject)
List<account> AccountToDelete = new List<account> (); //This will be null System.debug('Value AccountToDelete'+AccountToDelete);
We can declare the nested List as well. It can go up to five levels. This is called the Multidimensional list.
This is the list of set of integers.
List<List<Set<Integer>>> myNestedList = new List<List<Set<Integer>>>(); System.debug('value myNestedList'+myNestedList);
List can contain any number of records, but there is a limitation on heap size to prevent the performance issue and monopolizing the resources.
The following method is used in the list:add(Object) : Adds an element to the end of the list.
add(Integer, Object) :Inserts an element into the list at the specified index position.
addAll(List) : Adds all of the elements in the specified list to the list that calls the method. Both lists must be of the same type.
addAll(Set) :Add all of the elements in specified set to the list that calls the method. The set and the list must be of the same type.
clear() :Removes all elements from a list, consequently setting the list's length to zero.
clone() : Makes a duplicate copy of a list.
deepClone(Boolean, Boolean, Boolean) : Makes a duplicate copy of a list of sObject records, including the sObject records themselves.
equals(List) : Compares this list with the specified list and returns true if both lists are equal; otherwise, returns false.
get(Integer) : Returns the list element stored at the specified index.
getSObjectType() : Returns the token of the sObject type that makes up a list of sObjects.
hashCode() : Returns the hashcode corresponding to this list and its contents.
isEmpty() : Returns true if the list has zero elements.
iterator() : Returns an instance of an iterator for this list.
remove(Integer) : Removes the list element stored at the specified index, returning the element that was removed.
set(Integer, Object) : Sets the specified value for the element at the given index.
size() : Returns the number of elements in the list.
sort() : Sorts the items in the list in ascending order.
The following example demonstrates the use of all these methods
// Initialize the List List<string> ListOfStatesMethod = new List<string>(); // This statement would give null as output in Debug logs System.debug('Value of List'+ ListOfStatesMethod); // Add element to the list using add method ListOfStatesMethod.add('New York'); ListOfStatesMethod.add('Ohio'); // This statement would give New York and Ohio as output in Debug logs System.debug('Value of List with new States'+ ListOfStatesMethod); // Get the element at the index 0 String StateAtFirstPosition = ListOfStatesMethod.get(0); // This statement would give New York as output in Debug log System.debug('Value of List at First Position'+ StateAtFirstPosition); // set the element at 1 position ListOfStatesMethod.set(0, 'LA'); // This statement would give output in Debug log System.debug('Value of List with element set at First Position' + ListOfStatesMethod[0]); // Remove all the elements in List ListOfStatesMethod.clear(); // This statement would give output in Debug log System.debug('Value of List'+ ListOfStatesMethod);
You can use the array notation as well to declare the List, as given below, but this is not general practice in Apex programming −
String [] ListOfStates = new List<string>();
Example Inserting 100 contacts in contacts object
public class ContactInsertion {
List<contact> contactList = new List<contact>();
public void methodName() {
for(integer i=0; i<100 ; i++ ) {
contact cont = new contact(lastname = 'contact' + i);
contactList .add(cont);
}
insert contactList ;
}
}